基本用法
nodejs中的模块管理遵循commonjs规范。使用module.exports(可简写为exports)导出模块,使用require来引入模块。
例:
myModule.js
var myFunction=function(name){
return 'my name is ' + name;
}
module.exports=myFunction;
// 也可也成exports = muyFunction;
main.js
var myFunction = require('./myModule');
console.log(myFunction('Tom')); //my name is Tom
模块缓存
一个模块若被多次引入,只会被加载一次。例:
sum2.js
console.log('module2');
module.exports = function(a, b) {
return a + b;
}
sum3.js
var sum2 = require('./sum2');
console.log('module3');
module.exports = function(a, b, c) {
return sum2(sum2(a, b), c);
}
main.js
var sum2 = require('./sum2');
var sum3 = require('./sum3');
console.log(sum3(1, 2, 3)); //6
module2只会被打印一次,虽然sum3.js中引用了一次,main.js中又引用了一次,这就是模块缓存。
依赖闭环
假如两个模块相互依赖,会出现什么情况呢?
a.js
var b = require('./b.js');
console.log('module a');
module.exports=function(){
return 'I am a';
}
b.js
var a = require('./a.js');
console.log('module b');
module.exports=function(){
return 'I am b';
}
main.js
var a = require('./a.js');
var b = require('./b.js');
console.log(a());
console.log(b());
会依次打印出
module b
module a
I am a
i am b
这可以用依赖缓存来解释。
因为先引入的模块a,而模块a依赖模块b,所以模块b被首先加载了。然后模块a,b都在缓存中了。
然后再去引模块b的时候,就会从缓存中读了。