Есть ли способ загрузить определенные модули в nodejs?

1

Я создаю приложение с 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? Или он загружает весь скрипт с обеими функциями в кеше?

Я много гугл, но я не смог найти правильный ответ.

Теги:
node-modules

1 ответ

1
Лучший ответ

Является ли узел просто загружать 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;
  • 0
    Ах да, спасибо за ответ. Но разве ваш подход не загружает все содержимое foo и bar из-за необходимости при вызове test.js?
  • 0
    @EnriqueFoleman: Если что-то require("./test.js") , да. Если ничего не происходит, а foo и bar используются только в изоляции, нет. :-)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню