如何正确地要求文件到另一个文件

How to properly require files into another file

我有一堆js脚本文件使用require需要同一系列的库等等'

let path = require('path');
let _ = require('underscore');

我想将所有这些要求放入一个单独的库文件中,然后我可以在需要它们的文件中重复使用。我虽然我可以做这样的事情:

var common = function() {
    this.requireFiles = function() {
        let path = require('path');
        let _ = require('underscore');
        ...
    }
};
export.common = common;

但是,当我想将这个库包含在那些使用所有这些相同文件的文件中时,它不起作用。我正在尝试这样的事情:

let CommonTools = require('../server_libs/commonFiles').common;
let commonFiles = new CommonTools();
migration.requireFiles();

当我想使用下划线方法时,这给我一个错误,提示 _ 不是一个函数。关于我应该在哪里寻找对此主题的更好理解的任何提示?

个人不建议做通用模块。 node.js 模块的心态就是 require() 模块所需要的。是的,似乎在每个模块中输入了一点 extra/redundant,但它使每个模块都可以自我描述,并且不会在模块之间建立任何不必要的依赖关系,从而实现最简单的模块共享或重用选项。模块由 require() 子系统缓存,因此您在运行时只需根据需要在每个模块中 require() 就不会真正花费您。这几乎是 node.js 方式。

也就是说,如果你真的想做一个通用模块,你可以这样做:

common.js

module.exports = {
    _: require('underscore');
    path: require('path');
}

otherModule.js

const {_, path} = require('common.js');

// can now call underscore methods _.each()
// can now call path methods path.join()

这使用 destructing assignment 从 common.js 导出中获取属性并将它们分配给模块范围的变量,并在一个语句中为多个属性执行此操作。它仍然需要您列出您想要在此模块中定义的每个 属性(这有助于自我描述您在做什么)。

这还假设您使用的是 require()module.exports。如果您使用较新的 importexport 关键字,那么您可以相应地修改语法,但仍然使用相同的概念。