Javascript 我应该在每个文件中都需要一个模块,还是只需要一次并将其作为参数传递?

Javascript 我应该在每个文件中都需要一个模块,还是只需要一次并将其作为参数传递?,javascript,node.js,Javascript,Node.js,假设我有50个模块,每个模块都需要下划线库。这样加载下划线50次是否更好: //a module var _ = require('underscore'); 或者最好从主文件传递: //app.js var _ = require('underscore'); require('./app_modules/module1.js')(_); // passing _ as argument require('./app_modules/module2.js')(_); // passing _

假设我有50个模块,每个模块都需要下划线库。这样加载下划线50次是否更好:

//a module
var _ = require('underscore');
或者最好从主文件传递:

//app.js
var _ = require('underscore');
require('./app_modules/module1.js')(_); // passing _ as argument
require('./app_modules/module2.js')(_); // passing _ as argument
require('./app_modules/module3.js')(_); // passing _ as argument
(..)

这有什么区别吗?

模块在第一次加载后会被缓存,因此您可以在每个文件中都需要它
require()
调用
模块。_load

Module._load = function(request, parent, isMain) {
  // 1. Check Module._cache for the cached module. 
  // 2. Create a new Module instance if cache is empty.
  // 3. Save it to the cache.
  // 4. Call module.load() with your the given filename.
  //    This will call module.compile() after reading the file contents.
  // 5. If there was an error loading/parsing the file, 
  //    delete the bad module from the cache
  // 6. return module.exports
};

请参阅:

第一个选项通常是最好的

因为require是缓存的,所以选择第二个选项并不能提高性能。使用第一个选项的优点是更容易理解,并且不需要将每个模块作为一个函数使用下划线库作为参数


但是,您可能希望能够轻松地更改正在使用的库。如果是这样的话,第二个选项是有意义的,因为您只需要更改主文件中的库。无论如何,我相信这是一个完全不常见的用例,所以使用第一个选项可能没问题。

使用一个可以避免主文件混乱的选项(无论如何都需要缓存)以下是
node/lib/module.js
中的实际代码:您还可以通过创建第二个名为
library.js
的文件来实现库的更改,该文件的内容为
module.exports=require('下划线')
然后根据需要在每个文件中添加
library.js
。我一直有相同的问题,现在我发现最好在所有地方使用X库的连接。这样,如果您使用任何绑定系统,就可以区分给定模块使用的lib。这是相当前端相关的(网页包、浏览捆绑)。作为一个优势,您的IDE不会争辩某些库没有连接,捆绑系统可以实现(如果有支持的话)模块延迟加载。