Требуется по требованию ()

Скажем, я создаю библиотеку в ./libname который содержит один основной файл: main.js и несколько необязательных библиотечных файлов, которые иногда используются с основным объектом: a.js а также b.js,

я создаю index.js файл со следующим:

exports.MainClass = require('main.js').MainClass; // shortcut
exports.a = require('a');
exports.b = require('b');

И теперь я могу использовать библиотеку следующим образом:

var lib = require('./libname');
lib.MainClass;
lib.a.Something; // Here I need the optional utility object
lib.b.SomeOtherThing;

Однако это означает, что я загружаю "a.js" и "b.js" всегда, а не тогда, когда они мне действительно нужны.

Конечно, я могу вручную загрузить дополнительные модули с require('./libname/a.js'), но потом я теряю симпатичную lib.a точка-обозначение:)

Есть ли способ реализовать загрузку по требованию с каким-то индексным файлом? Может быть, некоторые package.json магия может играть здесь хорошо?

2 ответа

Решение

Похоже, единственный способ - использовать геттеры. Короче вот так:

exports = {
    MainClass : require('main.js').MainClass,
    get a(){ return require('./a.js'); },
    get b(){ return require('./a.js'); }
}

Это возможно, если вы вызвали "MainClass" для динамической загрузки дополнительных модулей по требованию. Но я подозреваю, что это также будет означать корректировку в API для доступа к модулю.

Я думаю, ваша мотивация состоит в том, чтобы "избежать" дополнительной обработки, используемой "ненужными модулями". Но помните, что Node является однопоточным, поэтому загрузка модуля занимает не каждое соединение, а процесс. Загрузка модуля является одноразовой, чтобы загрузить его в память.

Другими словами, модули загружаются только когда вы запускаете сервер, а не каждый раз, когда кто-то делает запрос.

Я думаю, что вы смотрите на это со стороны клиентского программирования, где выгодно загружать скрипты, когда они необходимы для экономии как при обработке, так и при запросах http.

На сервере самое большее, что вы будете экономить, это несколько лишних укусов в памяти.

Другие вопросы по тегам