Как предотвратить установку модулей 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 здесь
производство
Счастливая контейнеризация =)
Ответ 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
- это правильный способ установки узловых модулей, необходимых для производства. Проверьте документацию для более подробной информации