2013-04-23 2 views
4

Хорошо, у меня немного странная ситуация. У меня есть приложение-узел, которое будет доставлено в системы, которые не имеют доступа к Интернету. У меня все депилы в файле package.json, но когда я доставляю сервер, я не могу запустить npm install.Где хранить модули npm в контроле источника проекта узла

В настоящее время каталог node_modules проверяется на SVN. Пока я ненавижу это, потому что каждый раз, когда мне нужно получить более новую версию модуля, я удаляю весь модуль из SVN, устанавливаю более новую версию, добавляю ее в SVN и checkin.

Другой вариант, который у меня есть, имеет какую-то сборку, которая устанавливает npm при упаковывании приложения узла для доставки. Возможно, что-то, что проверяет SVN, делает npm install и создает необходимый архив или rpm.

Я использовал 'bundler' для ruby ​​в прошлом, и это довольно приятно, так как вы просто положили все, что вы депируете в другой каталог, и он потянет эти депы. Отлично работает, если вы в автономном режиме. Что-нибудь подобное для узла?

+0

Для чего вы собираетесь использовать? Обычно я использую его с помощью диспетчера пакетов системы (например, .deb для Debian, .rpm для RedHat/Centos и т. Д.). – tjameson

ответ

3

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

node_modules in git

Хотя от 10 декабря 2011 года, так может быть в далеком прошлом.

Update: в январе 2014 года, совет хранить все ваши node_modules в системе управления версиями до сих пор применяются.

+1

Я бы рекомендовал не проверять в node_modules из-за таких пакетов, как phantomjs, например, которые устанавливают соответствующий двоичный файл для текущей системы. Это означает, что если один Dev запускает npm install в Linux и проверяет в node_modules - он не будет работать для другого Dev, который клонирует репо в Windows. Лучше проверить в tarballs, которые npm загружают, и назовите npm-shrinkwrap.json на них. Вы можете автоматизировать этот процесс, используя инструмент npm install -g shrinkpack. –

1

Я также сталкиваюсь с аналогичным сценарием развертывания, и решение, которое я выполнил после этого, опирается на использование make (инструмент unix) и запись собственного Makefile. Makefile - это текстовый файл, который следует за определенным форматированием и где вы создаете цели, например: test, publish, install .. Каждая цель - это часть кода Bash, которая запускается при вызове из командной строки, например: 'make publish', или вы можете связать их вместе, например 'make test publish'.

Итак, в моем сценарии у меня есть «тестовая» цель, которая выполняет мои тесты, тогда у меня есть цель «публикации», которая выполняет несколько таких действий, как call «npm install», а затем «npm prune» (для удаления старой npm зависимостей, я прекратил использовать). Затем «публикация» закончена, сделав gzip папки в отдельное место, а затем подталкивает код в качестве места интрасети, с которого мой производственный сервер может загружать и распаковывать. Все коды node_modules идут в zip-файле. На рабочем сервере команда Operations извлекает gzip, а затем вызывает «make start». «start» - это еще одна цель, которая устанавливает любые переменные среды и запускает мое приложение-узел.

Подводя итог, у меня есть node_modules в управлении исходным кодом, и я нашел makefile очень настраиваемым, и поэтому он хорошо подходит для разных проектов с различными потребностями, но вы можете сохранить соглашение о наименовании своих целей, поэтому его легко для других сотрудников команды и DevOps для тестирования/публикации/установки вашего приложения.

С уважением, Луис.

2

Существует CLI под названием shrinkpack, который может помочь вам в этом.

Он работает путем чтения зависимости граф, порожденный npm shrinkwrap и переуказание в https: // URLs для каждой зависимости (и суб-зависимость), чтобы вместо того, чтобы указать на тарболла в node_shrinkwrap каталог в вашем проекте.

node_shrinkwrap каталог содержит те же самые .tgz файлы, npm install загрузки из реестра НПМ и - так как npm-shrinkwrap.json файл присутствует (созданный npm shrinkwrap и обновляется shrinkpack) - npm install знает установить с помощью тарболы локально, вместо того, чтобы переходить через сеть в реестр npm.

npm install -g shrinkpack 
Смежные вопросы