2014-12-07 3 views
0

Я работаю над модулем Node.js A, который использует другой модуль Node.js B из NPM. На NPM появились новые версии модуля B. Я хочу, чтобы мой модуль A динамически обновлялся до последних версий модуля B (модуль A всегда зависит от последней версии модуля B). Кроме того, все ссылки импортируемого модуля также должны обновляться динамически.Динамическая установка и загрузка модуля Node.js

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

Кроме того, как принудительно обновлять ссылки на модули, импортированные через require?

Спасибо!

ответ

2

По крайней мере, в первой части вашего вопроса (модуль А всегда использует последнюю версию модуля В), вы всегда можете указать зависимость в вашем package.json с major version wildcard:

{ 
    "dependencies": { 
    "moduleB": "*" 
    } 
} 

Какой бы тогда позволить вы всегда npm update до последней версии. (Это могло бы, однако, потенциально повлиять на внесение изменений, которые нарушают совместимость в обратном направлении в вашем модуле, поскольку npm использует Semantic Versioning.)

Что касается работы npm update, то я должен спросить - зачем это необходимо? Какая польза для пользователей вашего модуля? Вы должны быть, по крайней мере, «кураторскими» обновлениями своих зависимостей, чтобы не вводить никаких изменений. Если вы создали полный автоматический конвейер для обновления зависимостей (от npm update зависимых от git tag новых версий до npm version этих новых версий до npm publish, например, таких новых версий), вы как бы убираете пользователей своего модуля на холоде, если любой из этих шагов нарушит совместимость с их кодом.

(Кроме того, если эта автоматическая зависимость обновления никогда перерывов вашего модуля, то, что ваш модуль добавления? Является ли это даже делать что-нибудь нетривиальное с зависимостями?)

Это может показаться громоздким, но это более эффективная практика обновления ваших зависимостей с помощью некоторых ремесел и намерений. See Semantic Versioning for more info.

+0

Спасибо @wisew за указатели! Причина, по которой «обновление npm» должна произойти автоматически, заключается в том, что 1. Модуль B также будет опубликован мной 2. Обновления модуля B будут критическими исправлениями ошибок. Идея состоит в том, чтобы абстрагировать часто обновляемую (с исправлениями) часть экосистемы в отдельный модуль, и все остальные модули будут иметь «зависимость» от нее. Модуль B будет курировать до публикации в NPM. Я хочу, чтобы потребители модуля A получали кураторские версии модуля B с критическими исправлениями без их вмешательства. – CodeNinja

Смежные вопросы