阅读博文:https://ssshooter.com/2019-03...这篇短文用于快速了解nodejs模块(即CommonJS规范)。本质上module.exports是用来暴露一个值的,默认是一个对象,也可以被覆盖为原始值。尝试直接将模块的值记录到文件中,可以得到:{id:'.',exports:{},//默认空对象parent:null,filename:'/Users/a10.12/webpack-learning/src/module.js',loaded:false,children:[],paths:['...']}需要修改模块的exports属性,输出需要输出的内容,使用require导入一个模块,module.exports的值是多少,requireget是什么。在index.js中使用egmodule.jsmodule.exports={s:2,}importletv=require('./module.js')console.log(v)//输出为{s:2}raw的取值也是一样module.exports=2letv=require('./module.js')console.log(v)//输出为2因为module.exports默认是一个对象,所以自然有这样的输出对象时的一个值一种写法:module.exports.s=2这样require也得到{s:2}。缩写大概是大佬觉得module.exports写的太长,所以把exports引用到module.exports,所以在检查这两个东西是否相等的时候,returntrue:console.log(exports===module.exports)//true有了这个特性,在导出对象的时候这样写就很方便了:exports.s=2letv=require('./module.js')console.log(v)//输出是2但你不能这样写://suchexports=2//orsuchexports={s:2,}//arenotallowedletv=require('./module.js')console.log(v)//output上面说了exports只是对module.exports的引用,可以给引用的对象添加属性,但是一旦用上面两种方法覆盖了exports对module.exports的引用,exports就会等于无效。最后,如果你不明白我前面说的,你可能需要加深对ECMAScript引用值和原始值的理解……
