Node模块化原理
- 在 Node 中,每个模块内部都有一个自己的 module 对象
- 该 module 对象中,有一个成员exports,exports 也是一个对象
- 也就是说如果你需要对外导出成员,只需要把导出的成员挂载到 module.exports 中
- 每次导出接口成员的都需要通过 module.exports.xxx = xxx 的方式,有点麻烦。所以,Node 为了简化操作,专门提供了一个变量exports(
expors = module.exports
) - var 变量名 = require('引入的模块') 等同于
var 变量名 = 引入的模块中的module.exports
- 可以理解为在Node.js中每个js文件都存在以下代码
var module = {
exports: {}
}
//将module.exports的引用赋值给exports
var exports = module.exports
//将需要导出的成员进行挂载
// module.exports.add = function (x, y) {
// return x + y
// }
// exports.reduce = function (x, y) {
// return x - y
// }
return module.exports
exports与module.exports
exports只是module.exports的一个引用
- exports只能通过点的方式赋值,直接赋值不会影响module.exports
//改变了exports的引用,最后return是module.exports的引用,所以并不会影响导出的对象
exports = function (x, y) {
return x + y
}
- module.exports可以直接赋值,但是需要注意后者会覆盖前者
module.exports = 'hello';
//后者会覆盖前者
module.exports = function add(x,y) {
return x+y;
}
实际应用:
导出单个成员:module.exports = xxx
导出多个成员: exports.xxx = xxx 或 modeule.exports = {};