模块化:
是从代码逻辑的角度进行划分的;方便代码分层开发,保证每个功能模块的职能单一;
传统非模块化开发有如下的缺点:
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解析