commonjs
commonjs 中有几个特别的变量,module
、exports
、require
、global
、__filename
、__dirname
。
在一个 js 文件中输入下面这行,你会发现可以打印出 5 个 argument。
console.log(arguments);
它们分别对应的就是:exports
、require
、module
、__filename
、__dirname
。
commonjs 的导出机制比较简单,只有 module.exports
和 exports
。需要注意的是,他们指向的都是同一个对象。如果对 module.exports
赋值,则通过 exports.xxx
导出的所有变量都会失效,它所指向的对象和 module.exports
指向的不是同一个对象,而导出时是以 module.exports
指向的对象为准。
require
是动态导入模块的,只有执行到 require
语句的时候才会导入模块,它导入的是模块的一个拷贝。模块导入一次之后就会被缓存起来,后面再导入时都是使用的已缓存的版本。
举个简单例子,下面代码会先打印 index
再打印 a
。如果把 require
换成 import
,则会先打印 a
再打印 index
。
// a.js
console.log('a')
// index.js
console.log('index')
require('./a')
</