对于使用NodeJS的module.exports和require(),我真的不了解一件事。由于我无法正确解释,我无法找到我要查找的信息,所以我在这里寻求帮助寻找答案。
我可以导出以下功能:
example1.js
module.exports = {
hello: function() {
return 'Hello world';
});
}
OR
example2.js
module.exports = function(data) {
return data;
}
我可以使用类似的东西:
console.log(require('./example1.js').hello());
OR
console.log(require('./example2.js')('hello world'));
从那里开始,如果我在server.js
中调用NPM模块,如:
var bcrypt = require('bcrypt');
并且我想在另一个模块中使用它,最好将它传递给函数,如:
example3.js
module.exports = function(bcrypt) {
return bcrypt.hashSync('hello', 5);
}
之后(记录哈希):
console.log(require(./example3.js)(bcrypt));
或直接在模块中声明它?
example3bis.js
var bcrypt = require('bcrypt');
module.exports = function() {
return bcrypt.hashSync('hello', 5);
}
另一个问题,如果我在server.js
和example3bis.js
这样的特定模块中声明bcrypt,这是否意味着我重复代码?
最后,是否有关于模块的良好实践?
我不知道我是否清楚地解释了事情,但是我尝试了解模块周围的事情(npm或导出)以及如果我多次调用它们,代码是如何复制的。
提前感谢您的回答!
答案 0 :(得分:1)
好的,这是答案
require
文件中使用该模块的模块,不要传递它。
require
只维护已加载的模块的缓存,因此多次require
模块没有任何性能损失,并且没有代码重复
所以一般来说,根本不需要担心代码重复或性能问题,这些已经在模块系统中考虑过,只需要模块,在需要它的文件中而不是作为参数传递,这导致清洁代码
答案 1 :(得分:0)
你可以这样做,但我建议只需要()在你需要的其他模块中再次使用它。这样你就不会自己缓存和传递模块,这会消耗更多的资源。
模块被缓存,所以第一次需要()一个模块时,它就在内存中并保持不变直到被删除。所以没有代码重复。因此,只需要在每个其他模块中使用您需要的模块,您将获得其导出的相同存储/缓存副本。
答案 2 :(得分:0)