我正在用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 ?或者,它是否使用缓存中的两个函数加载整个脚本?
我搜索了很多,但我找不到合适的答案。
答案 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;