Node.js 之模块化
服务器端模块化
- 服务器端模块化规范CommonJS与实现Node.js
- 模块导出与引入
- 模块导出机制分析
- 模块加载规则
+ 模块查找 不加扩展名的时候会按照如下后缀顺序进行查找 .js .json .node
- 模块分类
+ 自定义模块
+ 系统核心模块
* fs 文件操作
* http 网络操作
* path 路径操作
* querystring 查询参数解析
* url url解析
* ......
模块化开发
传统非模块化开发有如下的缺点:
1、命名冲突
2、文件依赖
前端标准的模块化规范:
1、AMD - requirejs
2、CMD - seajs
服务器端的模块化规范:
1、CommonJS - Node.js
模块化相关的规则:
1、如何定义模块:一个js文件就是一个模块,模块内部的成员都是相互独立
2、模块成员的导出和引入
模块成员的导出最终以module.exports为准
如果要导出单个的成员或者比较少的成员,一般我们使用exports导出;
如果要导出的成员比较多,一般我们使用module.exports的方式
这两种方式不能同时使用
exports与module的关系:
module.exports = exports = {};
/*03.js*/
var sum = function(a,b){ return parseInt(a) + parseInt(b); } // 导出模块成员 exports.sum = sum; // 导出成员的另一种方式 module.exports = function(){ console.log('hello'); };
/* 引入模块 */ var module = require('./03.js'); // var ret = module.sum(12,13); // console.log(ret); // var ret = module(12,15); // console.log(ret); // console.log(typeof module); module();
/*
05.js
四则运算-成员导出方式分析
*/ var sum = function(a,b){ return parseInt(a) + parseInt(b); } var subtract = function(a,b){ return parseInt(a) - parseInt(b); } var multiply = function(a,b){ return parseInt(a) * parseInt(b); } var divide = function(a,b){ return parseInt(a) / parseInt(b); } // 导出成员 // exports.sum = sum; // exports.subtract = subtract; // module.exports = { // sum : sum, // subtract : subtract, // multiply : multiply, // divide : divide // } // module.exports = [1,2,3];
/* 测试导出 */ var m = require('./05.js'); console.log(m); // var ret = m.sum(1,2); // var ret1 = m.subtract(1,2); // console.log(ret,ret1);
/* 模块文件的后缀3种情况:.js .json .node 上述三种模块的加载优先级(不加文件后缀时的优先级):.js -> .json -> .node */ // require('./07'); // console.log(global.flag); // var m = require('./data.json'); // console.log(m.username); // var m = require('./addon.node'); // // console.log(typeof m); // var ret = m.hello(); // console.log(ret); var m = require('./data'); // console.log(m); var ret = m.hello(); console.log(ret);
浙公网安备 33010602011771号