有没有办法在nodejs中加载特定的模块?

时间:2018-01-07 13:25:38

标签: javascript node.js node-modules

我正在用NodeJS创建一个应用程序,我想只导入我自己模块的某些部分,所以我可以稍后加载其他部分(这是为了提高性能而不必将所有模块加载到内存中) 。例如:

test.js

const foo = () => {
    //something
    return x
}
const bar = () => {
    //something
    return y
}

module.exports.someFunc = foo
module.exports.otherFunc = bar

所以,如果我像这样导入 app.js

app.js

const a = require('./test').someFunc

节点是否只是从 test.js 加载 someFunc ?或者,它是否使用缓存中的两个函数加载整个脚本?

我搜索了很多,但我找不到合适的答案。

1 个答案:

答案 0 :(得分:1)

  

节点是否只是从test.js加载someFunc?或者,它是否使用缓存中的两个函数加载整个脚本?

后者。如果模块尚未加载,则会加载并执行其完整文件(包含所有副作用),并缓存生成的导出对象。然后,您将获得对模块的导出对象的引用,然后您的代码从中获取someFunc

这是Node模块系统的当前限制。如果你希望它们是分开的,你需要将它们分开(然后可能创建一个模块,其作用是加载它们,对于已经使用完整模块的代码),例如:

foo.js

const foo = () => {
    //something
    return x
};
exports = foo;

bar.js

const bar = () => {
    //something
    return y
};
exports = bar;

..然后也许test.js

const foo = require("./foo.js");
const bar = require("./bar.js");

module.exports.someFunc = foo;
module.exports.otherFunc = bar;