在加载 JavaScript 模块时,被加载的模块被包裹在一个函数中:
function(module, exports, __filename, __dirname, …) {
JavaScript module
}
每个 JavaScript 模块访问到的 module、exports、__filename、__dirname 等实际上是通过函数参数传递进来的。由于这种包裹,才使得模块的局部变量外部无法访问。但有时候也会出现让人难以理解的问题,例如:
test1.js
exports = {
name: ‘Name5566’,
}
test2.js
module.exports = {
name: ‘Name5566’,
}
加载这两个模块:
var test1 = require(‘./test1.js’);
console.log(test1.name); // undefined
var test2 = require(‘./test2.js’);
console.log(test2.name); // Name5566
exports 作为参数传递给模块,我们通过 exports.x 自然可以给 exports 对象添加属性(或方法),但直接给 exports 赋值(例如,exports = x)仅仅是改变了形参而非实参的值,因此:
1.为 exports 添加属性时,使用 exports
2.为 exports 赋值时,使用 module.exports
包
按 CommonJS 的规范,一个完整的包应该包含有:
1.package.json 包描述文件
2.bin 二进制文件目录
3.lib JavaScript 代码目录
4.doc 文档目录
5.test 测试代码目录
NPM 是一个 Node 的一个包管理工具。常见用法:
查看命令的文档:
npm help install
查看命令 install 的文档。
安装一个包:
npm install redis
安装 redis 这个包。install 命令会将包安装在当前目录下的 node_modules 目录中。
移除一个包:
npm remove redis
移除 redis 这个包。remove 命令会将当前目录下的包移除掉。









