Как предотвратить установку модулей NPM "devDependencies" для Node.js (package.json)? - PullRequest
520 голосов
/ 14 февраля 2012

У меня есть это в моем файле package.json (сокращенная версия):

{
  "name": "a-module",
  "version": "0.0.1",
  "dependencies": {
    "coffee-script":      ">= 1.1.3"
  },
  "devDependencies": {
    "stylus":             ">= 0.17.0"
  }
}

Я использую NPM версии 1.1.1 на Mac 10.6.8.

Когда я запускаю следующую команду из корня проекта, она устанавливает dependencies и devDependencies:

npm install

У меня сложилось впечатление, что эта команда установила devDependencies:

npm install --dev

Как мне сделать так, чтобы npm install только устанавливал dependencies (чтобы производственная среда получала только эти модули), тогда как что-то вроде npm install --dev устанавливает и dependencies, и devDependencies?

Ответы [ 14 ]

733 голосов
/ 14 февраля 2012

Команда npm install установит devDependencies вместе с другими dependencies при запуске в каталоге пакета в среде разработки (по умолчанию).

Использование npm install --only=prod (или --only=production) для установки только dependencies, а не devDependencies, независимо от значения переменной среды NODE_ENV.

Источник: npm docs

Примечание: До версии 3.3.0 npm (2015-08-13) опция называлась --production, то есть npm install --production.

213 голосов
/ 25 октября 2012

Я тоже столкнулся с этой проблемой!Установка npm несколько сбивает с толку, и веб-сообщения продолжают вносить флаги -d / - dev, как будто существует явный режим установки 'development'.

  • npm install установит " зависимости " и " devDependencies "

  • npm install --production установит только " зависимости"

  • npm install --dev будет устанавливать только" devDependencies"

125 голосов
/ 22 декабря 2015

Новая опция:

npm install --only=prod

Если вы хотите установить только devDependencies:

npm install --only=dev
43 голосов
/ 08 апреля 2016

Если вы прочитали этот POST в 2016 году, добейтесь того, что вы хотите, используя аргумент

--only={prod[uction]|dev[elopment]} 

, который приведет к установке только devDependencies или не-devDependencies независимо от NODE_ENV.1005 * от: https://docs.npmjs.com/cli/install

27 голосов
/ 30 декабря 2015

Если вы уже установили все свои зависимости и хотите избежать повторной загрузки производственных пакетов из NPM, вы можете просто набрать:

npm prune --production

Это удалит ваши зависимости dev из вашего *Папка 1004 *, которая полезна, если вы пытаетесь автоматизировать двухэтапный процесс, такой как

  1. Запакуйте мой проект через Интернет, используя зависимости dev
  2. Создание образа Docker с использованием только производственных модулей

Запуск npm prune между ними избавит вас от необходимости переустанавливать все!

19 голосов
/ 07 апреля 2013

При использовании «npm install» модули загружаются и доступны во всем приложении независимо от того, являются ли они «devDependencies» или «зависимости».Суть этой идеи: все, что ваш package.json определяет как зависимость (любого типа), устанавливается в node_modules.

Цель различия между зависимостями / devDependencies / optionDependencies заключается в том, что потребители вашего кода могут делать с/ npm для установки этих ресурсов.

Согласно документации: https://npmjs.org/doc/json.html...

Если кто-то планирует загрузить и использовать ваш модуль в своей программе, то он, вероятно, не хочетили вам нужно скачать и собрать используемую внешнюю среду тестирования или документации.

В этом случае лучше перечислить эти дополнительные элементы в хэше devDependencies.

Эти вещи будут устанавливаться всякий раз, когдаустановлен флаг конфигурации --dev.Этот флаг устанавливается автоматически при выполнении ссылки npm или при установке npm из корня пакета и может управляться как любой другой параметр конфигурации npm.Подробности смотрите в config (1).

Однако, чтобы решить этот вопрос, если вы хотите ТОЛЬКО установить «зависимости» с помощью npm, следующая команда:

npm install --production

Это можно подтвердить, посмотрев коммит Git, который добавил этот фильтр (наряду с некоторыми другими фильтрами [перечисленными ниже] для обеспечения этой функциональности).

Альтернативные фильтры, которые могут использоваться npm:

--save          => updates dependencies entries in the {{{json}}} file
--force         => force fetching remote entries if they exist on disk 
--force-latest  => force latest version on conflict
--production    => do NOT install project devDependencies
--no-color      => do not print colors

@ dmarr попробуйте использовать npm install --production

16 голосов
/ 05 апреля 2013

npm установит зависимости dev при установке из пакета (если в текущем каталоге есть package.json).Если он находится в другом месте (реестр npm, git repo, другое место в файловой системе), он устанавливает только зависимости.

3 голосов
/ 19 июля 2016

Использовать npm install packageName --save это добавит пакет в зависимости , если вы используете npm install packageName --save-dev, тогда это devDependencies .

npm install packageName --save-dev следует использовать для добавления пакетов в целях разработки. Как добавление пакетов TDD (чай, мокко и т. Д.). Которые используются в разработке, а не в производстве.

3 голосов
/ 02 октября 2015

Я обнаружил, что при попытке установить зависимости dev для пакета, который содержит аддон узла, вы не можете избежать сборки аддона при запуске npm install --dev, даже если вы просто хотите установить devDependencies. Итак, мне пришлось обойти спину npm:

node -e 'console.log( Object.keys( require( "./package.json" ).devDependencies ) );' | \
sed  -e "s/^[^']*'//" -e "s/'.*$//" | \
xargs npm install

Или, еще лучше (и более кратко),

node -e 'Object.keys( require( "./package.json" ).devDependencies )
.map( function( item ){ console.log( item ) } );' | xargs npm install
2 голосов
/ 24 ноября 2012

Необходимо добавить к выбранному ответу: На данный момент npm install в каталоге пакета (содержащем package.json) будет устанавливать devDependencies, тогда как npm install -g не будет их устанавливать.

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