Лучший рабочий процесс с использованием node.js npm и git - PullRequest
7 голосов
/ 08 февраля 2012

Я собираюсь сделать большой проект с node.js и сейчас пытаюсь разобраться с некоторыми вещами.

В более ранних проектах узлов у меня была дополнительная папка для всех модулей узла, которые я использовал.Эта папка была проигнорирована git, и я управлял версией и обновлениями через подмодули git, что было непросто (никаких зависимостей, обновление до новой версии не всегда было забавным.)

Я ищу:

npm install packagename
npm dump_modules_into_file

Так что все, кто участвует в этом проекте, могут сделать:

npm install_or_update_modules_from_file

Я не хочуnode_modules отслеживается моим Git-хранилищем.В основном я хочу что-то похожее на то, как symonfy2 обрабатывает это связки .

PS: я знаю о npm submodule packagename, но эта команда не очень полезна, потому что она не устанавливает зависимости и неОбновите модули.

PS2: Я готов о package.json, но это также имеет некоторые недостатки.(Нет параметров, и вы должны обновлять версии модулей вручную.)

Ответы [ 3 ]

6 голосов
/ 08 февраля 2012

package.json выполнит то, что вы ищете.В вашем комментарии о передаче флага --mongodb:native этот флаг является аргументом для команды npm, а работает при использовании package.json в вашем собственном проекте.В пакете mongodb есть «скрипт установки», который ищет этот флаг в среде обработки узлов.Если этот флаг присутствует, то он порождает другой процесс для сборки.Итак, если у вас есть mongodb в качестве зависимости в вашем package.json

{
    "name": "MyProject"
  , "description": "Test"
  , "version": "0.0.1"
  , "dependencies": {
        "mongodb": "*"
    }
}

Запуск npm install --mongodb:native будет работать.

Что касается «обновления вручную»"- это действительно только первый раз, когда это может занять некоторое время, и я уверен, что вы могли бы написать скрипт для его генерации, если существует много зависимостей.Тем не менее, похоже, что у вас довольно большая команда, и если это так, то автоматизация обновлений package.json станет действительно уродливой (подумайте о новых разработчиках, экспериментальных возможностях и т. Д.). В этой части мы будем нести ответственность за сломанные сборки.цикла разработки не обязательно плохая идея.

Ссылки:

EDIT : и, как упомянул Ник, добавление каталога 'node_modules' в .gitignore предотвратит проверку любого из этих файлов в вашем репо

2 голосов
/ 08 февраля 2012

Афаик, единственные способы управления пакетами - это то, что вы описали, хотя я не уверен, что вас не интересует wrt package.json.

Если вам нужен жесткий контроль над версиямииз используемых вами модулей вы можете явно указать номер версии.Вы также можете использовать подход >=X.X.X, чтобы автоматически получать последние версии (превышающие пороговое значение), которые иногда подходят для целей разработки.

Это позволяет вашим партнерам по команде:

npm install .

Который установит все зависимости, перечисленные в файле package.json.Они будут установлены на ./node_modules, но вы можете .gitignore, что, как вы заметили.

1 голос
/ 29 июля 2014

Чтобы полностью протестировать конфигурацию пакета и убедиться, что модули ведут себя так, как они будут при финальном развертывании, я теперь использую следующую процедуру.Это полностью избавляет от необходимости взламывать каталоги node_module или require() код, поэтому при развертывании просто работает .

Для внутренних проектов или предварительной версии для github вы также можете установить "private": true в своем package.json, поэтому npm откажется публиковать его.

  1. Создайте каталог проекта под контролем версий git и добавьте все ваши модули узлов в качестве подкаталогов.Имена подкаталогов должны совпадать с именами их пакетов.Если вы работаете с github, вам нужно создать отдельное git-репо для каждого каталога модулей.Это могут быть подмодули git в вашем репозитории проекта.Добавьте node_module к своим .gitignore файлам.

  2. Установите инструмент, подобный npm-server , и запустите его в каталоге проекта.Затем установите npm registry в localhost, чтобы теперь npm будет общаться с вашим локальным npm-сервером для получения пакетов.Все, что он найдет в качестве подкаталогов, которые он отправит.Любой, кто не найдет его, будет прокси на registry.npmjs.org. $ npm set registry http://localhost:6070/ $ cd ~/projects $ npm-server

  3. Запустите новую оболочку и создайте отдельный каталог песочницы $ mkdir sandbox $ cd sandbox

  4. Установите приложение с помощью локального сервера реестра.Очистите локальный кэш npm и переустановите приложение.Я делаю это в одну строку, чтобы легко повторить через оболочку.Вы можете написать его.

    $ npm cache clear; sleep 3; npm uninstall -g app; sleep 3; npm install -g app

  5. Протестируйте свое приложение:

    $ app ....

  6. Отмена регистрации локального реестра npm после завершения установки:

    $ npm set registry http://registry.npmjs.org:80/

  7. После завершения тестирования вы можете опубликовать свое приложение и повторно протестировать развертывание.с остановленным npm-сервером.

$ cd ~/projects $ npm publish app


Вместо регистрации и отмены регистрации сервера вы можете просто использовать сервер localhost для однократной установки: $ npm --registry=http://localhost:6070/ install app


Я пишу разветвленную версию npm-server, поэтому вы просто делаете: $ npmsvr on // Registers local registry server $ npmsvr start // Start local registry server $ npmsvr off // Deregisters local registry server

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...