В чем разница между "npm install" и "npm ci"? - PullRequest
0 голосов
/ 25 сентября 2018

Я работаю с непрерывной интеграцией и обнаружил команду npm ci .

Я не могу понять, каковы преимущества использования этой команды для моего рабочего процесса.

Это быстрее?Это делает тест более сложным, хорошо, и после?

Ответы [ 3 ]

0 голосов
/ 25 сентября 2018

Документация, на которую вы ссылались, содержала сводку:

Короче говоря, основные различия между использованием npm install и npm ci:

  • Проект должен иметь существующийpackage-lock.json или npm-shrinkwrap.json.
  • Если зависимости в блокировке пакета не совпадают с зависимостями в package.json, npm ci выйдет с ошибкой вместо обновления блокировки пакета.
  • npm ci может устанавливать только целые проекты за раз: с помощью этой команды нельзя добавить отдельные зависимости.
  • Если узел node_modules уже присутствует, он будет автоматически удален до того, как npm ci начнет установку.
  • Он никогда не будет писать в package.json или любой из блокировок пакетов: установки по сути заморожены.
0 голосов
/ 15 ноября 2018

Из документов npm :

Короче говоря, основные различия между использованием npm install и npm ci:

  • Проект должениметь существующий package-lock.json или npm-shrinkwrap.json.
  • Если зависимости в блокировке пакета не совпадают с зависимостями в package.json, npm ci завершится с ошибкой, вместо обновления блокировки пакета.
  • npm ci может устанавливать только целые проекты за раз: с помощью этой команды нельзя добавить отдельные зависимости.
  • Если узел node_modules уже присутствует, он будет автоматически удален до того, как npm ci начнет егоinstall.
  • Он никогда не будет писать в package.json или любой из пакетов-блокировок: установки по существу заморожены.

По существу, npm install читает package.json, чтобы создать список зависимостей, и использует package-lock.json, чтобы сообщить, какие версии этих зависимостей установить. Если зависимость не в package-lock.json, она будет добавлена ​​к npm install.

npm ci (названа в честь C непрерывной I ntegration) устанавливает зависимости непосредственно из package-lock.json и использует package.json только для проверки отсутствия несовпадающих версий. Если какие-либо зависимости отсутствуют или имеют несовместимые версии, будет выдано сообщение об ошибке .

Используйте npm install для добавления новых зависимостей и обновления зависимостей в проекте.Обычно вы используете его во время разработки после внесения изменений, которые обновляют список зависимостей, но в этом случае неплохо было бы использовать npm ci.

Использовать npm ci, если вам нужен детерминированный, повторяемыйстроить.Например, при непрерывной интеграции, автоматизированных заданиях и т. Д. И при первой установке зависимостей вместо npm install.

npm install

  • Устанавливает пакет и все его зависимости.
  • Зависимости определяются npm-shrinkwrap.json и package-lock.json (в указанном порядке).
  • без аргументов : устанавливает зависимостилокальный модуль.
  • Может устанавливать глобальные пакеты.
  • Устанавливает все отсутствующие зависимости в node_modules.
  • . Может записывать в package.json или package-lock.json.
    • При использовании с аргументом (npm i packagename) он может писать в package.json для добавления или обновления зависимости.
    • при использовании без аргументов (npm i) он может писать вpackage-lock.json для блокировки версии некоторых зависимостей, если их еще нет в этом файле.

npm ci

  • Требуется не менее npm v5.7.1 .
  • Требуется package-lock.json или npm-shrinkwrap.json.
  • Выдает ошибку, если зависимости из этих двух файловне соответствует package.json.
  • Удаляет node_modules и устанавливает все зависимости одновременно.
  • Он никогда не записывает в package.json или package-lock.json.

Алгоритм

Пока npm ci генерирует все дерево зависимостей из package-lock.json или npm-shrinkwrap.json, npm install обновляет содержимое node_modules, используяследующий алгоритм ( источник ):

load the existing node_modules tree from disk
clone the tree
fetch the package.json and assorted metadata and add it to the clone
walk the clone and add any missing dependencies
  dependencies will be added as close to the top as is possible
  without breaking any other modules
compare the original tree with the cloned tree and make a list of
actions to take to convert one to the other
execute all of the actions, deepest first
  kinds of actions are install, update, remove and move
0 голосов
/ 25 сентября 2018

npm ci удалит любую существующую папку node_modules и использует файл package.lock для установки конкретной версии каждого пакета.Это значительно быстрее, чем установка npm, потому что пропускает некоторые функции.Установка в чистом виде отлично подходит для конвейеров ci / cd и сборок докеров!Вы также используете его для установки всего сразу, а не конкретных пакетов.

...