Node.js 在每个单独的模块文件中重用所需npm的最佳实践

Node.js 在每个单独的模块文件中重用所需npm的最佳实践,node.js,node-modules,Node.js,Node Modules,我正在重构我的代码,以使事情更容易进入通过module.exports包含的单独模块中 其中许多模块使用相同的所需npm。在每个单独的模块中需要相同的npm是最佳实践,还是只在主js文件中包含该模块,然后将其导出是最佳实践 希望确保我遵循了其他开发人员的最佳实践,这些开发人员以后可能会使用我的代码库 谢谢大家! 您可以多次安全地要求相同的模块,并且节点仍将只加载一次。它缓存在第一个require上,所有后续require都会获得完全相同的对象—您甚至可以使用它来传递数据,这表明即使对于多个req

我正在重构我的代码,以使事情更容易进入通过module.exports包含的单独模块中

其中许多模块使用相同的所需npm。在每个单独的模块中需要相同的npm是最佳实践,还是只在主js文件中包含该模块,然后将其导出是最佳实践

希望确保我遵循了其他开发人员的最佳实践,这些开发人员以后可能会使用我的代码库


谢谢大家!

您可以多次安全地要求相同的模块,并且节点仍将只加载一次。它缓存在第一个require上,所有后续require都会获得完全相同的对象—您甚至可以使用它来传递数据,这表明即使对于多个require,它也必须是对象的同一副本

例如,如果您在一个模块中需要lodash并向其添加一个函数,则在同一流程中需要lodash的所有其他位置,甚至在不同的文件中,都可以使用该函数

有些人建议每个模块只需要一次并共享,以避免多次加载,但Node无论如何不会多次加载

有些人建议每次使用它时都需要它,这样每个地方都有自己的新副本,但事实并非如此,因为所有东西都有相同的副本

对于require在Node中的工作方式存在许多误解

实例 查看此项目,其中包含两个模块,mod1和mod2,每个模块都需要lodash并导出其版本,以及一个同时需要这两个模块的应用程序,在其中一个模块中更改lodash.xxx,在另一个模块中检查lodash.xxx:

mod1.js: mod2.js: app.js:
您可以多次安全地要求相同的模块,但节点仍将只加载一次。它缓存在第一个require上,所有后续require都会获得完全相同的对象—您甚至可以使用它来传递数据,这表明即使对于多个require,它也必须是对象的同一副本

例如,如果您在一个模块中需要lodash并向其添加一个函数,则在同一流程中需要lodash的所有其他位置,甚至在不同的文件中,都可以使用该函数

有些人建议每个模块只需要一次并共享,以避免多次加载,但Node无论如何不会多次加载

有些人建议每次使用它时都需要它,这样每个地方都有自己的新副本,但事实并非如此,因为所有东西都有相同的副本

对于require在Node中的工作方式存在许多误解

实例 查看此项目,其中包含两个模块,mod1和mod2,每个模块都需要lodash并导出其版本,以及一个同时需要这两个模块的应用程序,在其中一个模块中更改lodash.xxx,在另一个模块中检查lodash.xxx:

mod1.js: mod2.js: app.js:
对不要这样做。每个模块都需要自己的模块。不要分享。是的。不要这样做。每个模块都需要自己的模块。不要共享。好吧,很酷,所以在不同的模块上只包含相同的库就可以了。@jremi是的,非常酷。除非出于其他原因需要一次。但是你可以在你的项目中的每个文件中要求像lodash这样的东西,这是完全好的。它仍然只会被加载一次,至少您可以查看const u=require'lodash';在每个文件的顶部,并知道它是什么。我没有测试示例。。。但为了确保我完全理解。。。你能粘贴console.logmod2.lodash.xxx的结果吗;我假设它也会导致“XXX”。。。对吗?好的,很酷,所以在不同的模块上包含相同的库应该没问题。@jremi是的,非常酷。除非出于其他原因需要一次。但是你可以在你的项目中的每个文件中要求像lodash这样的东西,这是完全好的。它仍然只会被加载一次,至少您可以查看const u=require'lodash';在每个文件的顶部,并知道它是什么。我没有测试示例。。。但为了确保我完全理解。。。你能粘贴console.logmod2.lodash.xxx的结果吗;我假设它也会导致“XXX”。。。对吗?
const lodash = require('lodash');
exports.lodash = lodash;
const lodash = require('lodash');
exports.lodash = lodash;
const mod1 = require('./mod1');
const mod2 = require('./mod2');
mod1.lodash.xxx = 'XXX';
console.log(mod2.lodash.xxx);