1、在node.js中我们使用require方法引入模块,require方法有一下特性需要注意:
- module被加载的时候执行,加载后缓存。比如我们在一个模块中输出一条信息,当我们在另一个模块中重复引入该模块,代码执行时都只会有一条输出信息。
- 一旦出现某个模块被循环加载,就只输出执行的部分还未执行的部分不会输出。
// moduleA.js
module.exports.testValue = 'a';
// 到此处开始执行moduleB的代码
const moduleB = require('./moduleB');
// 因为moduleB已经执行完毕此处输出bb
console.log('moduleB:',moduleB.testValue);
module.exports.testValue = 'aa';
// moduleB.js
module.exports.testValue = 'b';
const moduleA = require('./moduleA');
// 执行输出时因为moduleA中才执行到引入moduleB故此处输出值为a
console.log('moduleA',moduleA.testValue);
module.exports.testValue = 'bb';
// main.js
const moduleA = require('./moduleA');
// 因为在moduleA中已经引用了moduleB故此处引用并不会输出内容
const moduleB = require('./moduleB');
以上示例就是一个循环调用的例子,实际应用中我们要尽量避免循环调用一个模块。
2、exports与module.exports的区别。
在node.js中我们将模块导出时可以使用exports或者module.exports来导出模块中的内容。我们可以认为exports是一个变量它的值为module.exports,因此我们在导出模块的时候需要注意一下问题:
// 错误的写法
// export = 10;
// export = {
// name: 'xiaoming'
// }
// 正确的写法
export.name = 10;
export.obj = {
name: 'xiaoming'
}
// 或者
module.export = 10;
module.export = {
name: 'xiaoming'
}