在node.js中,默认一个js文件就是一个模块,是一个封闭的空间,外部想用js模块里面的值,那么就需要把值导出去
- node.js默认采用commonjs的模块化管理方式.引入一个模块化需要require("相对路径")的方式.而且每个导出模块node.js默认会返回return module.exports
//所有的CommonJS的模块都会包装到一个函数中
(function(exports,require,module,__filename,__dirname){
/**
参数
exports:向外暴露使用,
require引入使用,
moudle模块内容,
__filename当前模块的绝对路径
__dirname当前模块所在目录的路径
*/
//可以打印查看各个参数
//默认操作.两个指向的内存地址相同
module.exports = exports
//程序员自己写的内用
a = 1
b = 2
//如果给exports赋值exports={a:10},那module.exports的内存指向就和exports的指向不一样了
//如果想让有效exports赋值的内容能导出,则可以module.exports = exports
//属性赋值不影响内存地址
return module.exports
})
通过在模块中输出module可知
Module {
id: '.',
path: '',
exports: {},
filename: '',
loaded: false,
children: [],
paths: []
}
通过输出的代码可知 module.exports === exports的.也可以理解为他们指向同一块内存区域{}
注意对象赋值和对象的属性赋值,以及module.exports的指向,因为module.exports的指向是真正返回的内容
//module.exports指向谁就返回谁
module.exports = {a:10} //在导入该模块的地方返回{a:10}
module.exports.a = "你好" //对象的属性赋值,不会影响结果
exports.b = "世界" //对象的属性赋值,不会影响结果,和上面其实一样,只要exports不改变地址指向,就不会出问题
//注意
exports = {c:20} //在其他模块导入会为{}
//其实很好理解,exports一旦重新赋值,那么exports就指向了新的内存空间.而真正返回数据module.exports指向的那块内存空间依然是初始值{}
//如此时向要能正确使用该值,只需
module.exports = exports //把module.exports 的指向变成exports的指向即可
网友评论