Как вы предотвращаете установку модhive 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 ?

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

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

Источник: npm docs

Примечание: перед v3.3.0 от npm (2015-08-13) опция была вызвана --production , т.е. npm install --production .

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

  • npm install установит как « зависимости », так и « devDependencies »,

  • npm install –production будет устанавливать только « зависимости »,

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

Новый вариант:

 npm install --only=prod 

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

 npm install --only=dev 

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

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

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

от: https://docs.npmjs.com/cli/install

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

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

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

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

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

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

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

 npm install --production 

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

Альтернативные фильтры, которые могут использоваться 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

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

 npm prune --production 

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

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

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

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

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

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

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

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

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

Стоит отметить, что вы можете использовать NODE_ENV среды 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 для запуска в режиме «производства».

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

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

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