CommonJS
Node 应用由模块组成,采用 CommonJS 模块规范。
范例
a.js
var x = 5;
var addX = function(value) {
return value + x;
}
module.exports.x = x;
module.exports.addX = addX;
b.js
var example = require('./this.js');
console.log(example.x); // output: 5
说明
CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性。
module对象
打印a.js的module对象
// a.js
...
module.exports.x = x;
module.exports.addX = addX;
console.log(module);
输出结果
Module {
id: '.',
exports: { x: 5, addX: [Function: addX] },
parent: null,
filename: 'E:\\2.study\\backbone\\app\\a.js',
loaded: false,
children: [],
paths:
[ 'E:\\2.study\\backbone\\app\\node_modules',
'E:\\2.study\\backbone\\node_modules',
'E:\\2.study\\node_modules',
'E:\\node_modules' ] }
由此可见,module拥有id、exports、parent等相关属性
module对象属性解释
- module.id 模块的识别符,通常是带有绝对路径的模块文件名。
- 如果parents为null,返回
.
- 如果parents属性不为null,则返回当前文件的绝对路径
- 如果parents为null,返回
- module.filename 模块的文件名,带有绝对路径。
- module.loaded 返回一个布尔值,表示模块是否已经完成加载。
- module.parent 返回一个对象,表示最先引用该模块的模块。
- module.children 返回一个数组,表示该模块要用到的其他模块。
- module.exports 表示模块对外输出的值