Как предотвратить установку модулей NPM "devDependencies" для Node.js(package.json)?

У меня это в моем файле 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?

Ответ 1

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

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

Источник: нпм документы

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

Ответ 2

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

  • npm install обе "зависимости" и "devDependencies"

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

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

Ответ 3

Новая опция:

npm install --only=prod

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

npm install --only=dev

Ответ 4

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

--only={prod[uction]|dev[elopment]} 
Аргумент

приведет к тому, что независимо от NODE_ENV будут установлены только devDependencies или только non-devDependencies.

from: https://docs.npmjs.com/cli/install

Ответ 5

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

npm prune --production

Это приведет к удалению зависимостей вашего dev из вашей папки node_modules, что полезно, если вы пытаетесь автоматизировать двухэтапный процесс, например

  • Webpack мой проект, используя зависимости dev.
  • Создайте образ Docker, используя только производственные модули

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

Ответ 6

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

Цель разницы между зависимостями /devDependencies/optionalDependencies - это то, что пользователи вашего кода могут делать w/npm для установки этих ресурсов.

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

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

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

Эти вещи будут установлены каждый раз, когда флаг конфигурации --dev установлен. Этот флаг устанавливается автоматически при выполнении npm-ссылки или когда делая npm install из корня пакета, и может управляться как любой другой параметр конфигурации npm. См. Конфигурацию (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

Ответ 7

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

Ответ 8

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

Ответ 9

Я обнаружил, что при попытке установить зависимости dev для пакета, содержащего аддон node, вы не можете избежать создания аддона при запуске 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

Ответ 10

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

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

Ответ 11

Стоит отметить, что вы можете использовать переменную среды NODE_ENV для достижения того же результата. Особенно полезно, если вы контейнеризируете приложение Node (например, Docker).

NODE_ENV=production npm install

В приведенном выше коде будут установлены все ваши зависимости, но dev (т.е. devDependencies).

если вам нужно использовать переменные среды в Dockerfile, можно найти более подробную информацию здесь.

Переменные окружения легко перезаписывать при необходимости (например, если вы хотите запустить тестовый пакет, скажем, на Travis CI). Если бы это было так, вы могли бы сделать что-то вроде этого:

docker run -v $(pwd):/usr/src/app --rm -it -e NODE_ENV=production node:8 npm install

Документация NPM здесь

производство

  • По умолчанию: false
  • Тип: Boolean Установите значение true для запуска в режиме "производства".

    • devDependencies не установлены на самом верхнем уровне при запуске локальной установки npm без каких-либо аргументов.
    • Установите NODE_ENV = "production" для сценариев жизненного цикла.

Счастливая контейнеризация =)

Ответ 12

Теперь возникает проблема, если у вас есть package-lock.json с npm 5+. Вы должны удалить его перед использованием npm install --production.

Ответ 13

npm install --dev will install dev dependencies

И, в соответствии с вопросом для установки только зависимостей, следующая команда поможет

npm install --prod will install dependencies

Ответ 14

npm install --production - это правильный способ установки узловых модулей, необходимых для производства. Проверьте документацию для более подробной информации