8

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

16

У меня есть следующий сокращенный вариант файла 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?

5 ответ(ов)

3

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

  • npm install установит как "dependencies", так и "devDependencies".
  • npm install --production установит только "dependencies".
  • npm install --dev установит только "devDependencies".

Если у вас есть вопросы или нужна дополнительная информация, не стесняйтесь спрашивать!

1

Новая опция выглядит так:

npm install --only=prod

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

npm install --only=dev
0

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

npm prune --production

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

  1. Собрать проект с помощью Webpack, используя дев-зависимости
  2. Собирать Docker-образ, используя только продакшен-модули

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

0

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

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

Этот аргумент позволит установить только зависимости для разработки (devDependencies) или только неразвивающиеся зависимости (non-devDependencies), независимо от значения NODE_ENV.

Для получения дополнительной информации, вы можете обратиться к документации npm: https://docs.npmjs.com/cli/install.

0

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

Разница между dependencies, devDependencies и optionalDependencies заключается в том, что потребители вашего кода могут сделать с помощью npm для установки этих ресурсов.

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

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

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

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

Чтобы ответить на ваш вопрос: если вы хотите установить только dependencies с помощью npm, используйте следующую команду:

npm install --production

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

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

--save          => обновляет записи зависимостей в файле {{{json}}}
--force         => принудительно загружает удаленные записи, если они есть на диске 
--force-latest  => принудительно загружает последнюю версию при конфликте
--production    => не устанавливать `devDependencies` проекта
--no-color      => не выводить цвета

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

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь