我正在重构我的代码,以便更容易地通过module.exports包含在单独的模块中。
其中许多模块使用相同的npm。最佳做法是在每个单独的模块中要求相同的npm,或者最好只将模块包含在主js文件中,然后将其用于导出?
想要确保我遵循以后可能加入我的代码库的任何其他开发人员的最佳做法。
谢谢!
答案 0 :(得分:2)
您可以安全地多次使用同一个模块,它仍然只能由Node加载一次。它缓存在第一个require()
上,并且所有后续需求都获得完全相同的对象 - 您甚至可以使用它来传递数据,这表明它必须是对象的相同副本,即使是多个需求。
例如,如果你在一个模块中需要lodash并为其添加一个函数,它将在同一进程中需要lodash的其他每个地方都可用,即使在不同的文件中也是如此。
有些人建议只需要每个模块一次并共享以避免多次加载,但Node无论如何都不会加载它。
有些人建议您每次使用它时都要求它,以便每个地方都有自己的新副本,但事实并非如此,因为无论如何所有内容都是相同的副本。
对于如何在Node中工作有许多误解。
请参阅此项目,其中包含两个模块mod1
和mod2
,每个模块都需要lodash
并导出其版本,以及需要同时导出其中的应用,并更改lodash.xxx
一,并检查另一个lodash.xxx
:
mod1.js
const lodash = require('lodash');
exports.lodash = lodash;
mod2.js
const lodash = require('lodash');
exports.lodash = lodash;
app.js
const mod1 = require('./mod1');
const mod2 = require('./mod2');
mod1.lodash.xxx = 'XXX';
console.log(mod2.lodash.xxx);