Я создаю приложение с 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
Является ли узел просто загружать someFunc из test.js? Или он загружает весь скрипт с обеими функциями в кеше?
Я много гугл, но я не смог найти правильный ответ.
Является ли узел просто загружать someFunc из test.js? Или он загружает весь скрипт с обеими функциями в кеше?
Последний. Если модуль еще не загружен, его полный файл загружается и выполняется (со всеми побочными эффектами), а полученный объект экспорта кэшируется. Затем вы получаете ссылку на объект экспорта модуля, а затем ваш код принимает из него некоторый someFunc
.
Это текущее ограничение системы модулей узла. Если вы хотите, чтобы они были отдельными, вам нужно их разделить (а затем, возможно, создать модуль, задача которого - загрузить оба из них, для кода, который уже использует полный модуль), например:
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;
require("./test.js")
, да. Если ничего не происходит, а foo
и bar
используются только в изоляции, нет. :-)