node学习四:模块化

模块化:

是从代码逻辑的角度进行划分的;方便代码分层开发,保证每个功能模块的职能单一;

传统非模块化开发有如下的缺点:

1、命名冲突
2、文件依赖

前端标准的模块化规范:

1、AMD - requirejs
2、CMD - seajs

服务器端的模块化规范:

1、CommonJS - Node.js

模块化相关的规则:

1、如何定义模块:一个js文件就是一个模块,模块内部的成员都是相互独立
2、模块成员的导出和引入

前端模块化和服务器端模块化的区别:

本质上差不多
从js文件加载上来说的话是有区别的:
前端模块化加载js文件需要通过网络从服务器传输到浏览器端,代码才能执行,文件加载是异步的,因为要保证页面渲染的效率
服务器端模块化加载js文件只需要从磁盘加载到内存中,文件加载是同步的

exports导出模块成员:

03.js:

var sum = function(a,b){
    return parseInt(a) + parseInt(b);
}
// exports导出模块成员
exports.sum = sum;

04.js:

var module = require('./03.js');
var ret = module.sum(12,13);
console.log(ret);

输出:

module.exports导出成员:

03.js:

var sum = function(a,b){
    return parseInt(a) + parseInt(b);
}
module.exports = sum;

04.js:

var module = require('./03.js');
var ret = module(12,15);
console.log(ret);  

输出:

通过global导出成员(不常用):

07.js:

var flag = 123;
global.flag = flag;

08.js:

require('./07');
console.log(global.flag);

输出:

08.js导入多次相同的模板:

07.js:

console.log('hello');

var flag = 123;
global.flag = flag;

08.js:

require('./07');
require('./07');
require('./07');
require('./07');
require('./07');
require('./07');
console.log(global.flag);

输出(只会打印一次结果):

只会打印一次结果的原因:

已经加载的模块会缓存

模块的加载优先级(不加文件后缀时的优先级):

require('./07')省略文件后缀名,按文件名搜索加载模块时,模块的加载优先级(不加文件后缀时的优先级):07.js -> 07.json -> 07.node

模块成员的导出最终以module.exports为准

如果要导出单个的成员或者比较少的成员,一般我们使用exports导出;
如果要导出的成员比较多,一般我们使用module.exports的方式
这两种方式不能同时使用

exports与module的关系:

module.exports = exports = {};

模块分类:

自定义模块

系统核心模块

fs 文件操作
http 网络操作
path 路径操作
querystring 查询参数解析
url url解析

猜你喜欢

转载自blog.csdn.net/zerobaek/article/details/83998923