Заезд node_modules по сравнению с термоусадочной пленкой

Проверка в node_module была стандартом сообщества, но теперь у нас также есть возможность использовать shrinkwrap. Последнее имеет для меня больше смысла, но всегда есть шанс, что кто-то "заставил публиковать" и ввел ошибку. Есть ли дополнительные недостатки?

Ответы

Ответ 1

Мой любимый пост/философия на эту тему проходит весь путь назад (долгое время в node.js) до 2011 года:

https://web.archive.org/web/20150116024411/http://www.futurealoof.com/posts/nodemodules-in-git.html

Цитировать напрямую:

Если у вас есть приложение, которое вы развертываете, проверьте все ваши зависимости на node_modules. Если вы используете npm do deploy, определите для этих модулей только bundleDependencies. Если у вас есть зависимости, которые необходимо скомпилировать, вы все равно должны проверить код и просто запустить rebuild $npm при развертывании.

Каждый, кого я сказал, тоже говорит мне, что я идиот, а затем через несколько недель говорит мне, что я прав, и проверка node_modules на git была благом для развертывания и развития. Его объективно лучше, но вот некоторые из вопросов/жалоб, которые я, кажется, получаю.

Я думаю, что это все еще лучший совет.

Сценарий принудительной публикации редок и npm shrinkwrap, вероятно, будет работать для большинства людей. Но если вы развертываетесь в производственной среде, ничто не дает вам покоя, как проверка во всем каталоге node_modules.

В качестве альтернативы, если вы действительно, действительно не хотите проверять каталог node_modules, но хотите получить лучшую гарантию, не было принудительного нажатия, я бы посоветовал в npm help shrinkwrap:

Если вы хотите избежать риска того, что византийский автор заменит пакет, который вы используете, с кодом, который разбивает ваше приложение, вы можете изменить файл shrinkwrap, чтобы использовать ссылки git URL, а не номера версий, чтобы npm всегда выбирал все пакеты из git.

Конечно, кто-то может запустить странный git rebase или что-то еще и изменить хэш-код git commit... но теперь мы просто сходим с ума.

Ответ 2

npm FAQ напрямую отвечает на это:

  • Проверьте node_modules на git на вещи, которые вы развертываете, например на веб-сайтах и приложения.
  • Не проверяйте node_modules на git для библиотек и модулей предназначенные для повторного использования.
  • Используйте npm для управления зависимостями в своем dev среде, но не в сценариях развертывания.

цитируется npm FAQ