npm install не устанавливает devDependencies


256

На Windows по какой-то причине при запуске npm installон не установит devDependencies . AFAIK это должно. Если я запускаю npm install --dev devDependencies установлены. Я не понимаю, почему npm installне устанавливает devDependencies , но устанавливает только зависимости. Что может быть причиной? Как я могу это исправить?

Может быть, что-то не так с моим package.json ? Это перечислено ниже, если это может быть полезно:

{
  "name": "try-brunch",
  "version": "0.1.0",
  "private": "true",
  "devDependencies": {
    "brunch": "^2.0.4",
    "cssnano-brunch": "^1.1.5",
    "javascript-brunch": "^1.8.0",
    "sass-brunch": "^1.9.2",
    "uglify-js-brunch": "^1.7.8"
  },
  "dependencies": {
    "jquery": "^2.1.4"
  }
}

5
Зачем нам даже исправить это? Это должно быть по умолчанию! devDependenciesбуквально зависимости для разработчиков модуля . Бьюсь об заклад, большинство из нас npm installмодуль, чтобы использовать его, а не развивать его.
Константин Ван

Скажем, вы пишете приложение, и вам нужен плагин logger или webpack. это devdeps. те должны быть установлены. npm не устанавливает их в некоторых случаях.
Тристан Цара

1
Я имею в виду, установка для devDependenciesнеобходима только тогда, когда вы пишете пакет (приложение). Для его использования не требуется devDependencies. Поэтому разумно devDependenciesтребовать установки дополнительных флагов. Если npm installустановлено devDependencies по умолчанию , пользователи также получат избыточные пакеты.
Константин Ван

задокументированное поведение таково, что когда я делаю это npm iв своей папке, он берет py package.jsonи устанавливает как deps, так и devdeps. Это способ, которым он предназначен для работы, и он имеет смысл (например, когда я делаю это npm iпосле того, git cloneкак ожидаю, что у меня будет все, что мне нужно, включая, например, плагины для веб-пакетов). Этот вопрос относится к ошибке, когда фактическое поведение отличается от предполагаемого. Пожалуйста, посмотрите на документы - docs.npmjs.com/cli/install . Есть флаг, чтобы не устанавливать devdeps, но поведение по умолчанию заключается в их установке, что имеет смысл и является тем, чего все ожидают
Тристан Цара

Я не вижу каких-либо вменяемых причин, заставляющих меня не забывать запускать другую команду для установки, например, подключаемых модулей веб-пакетов или определений типа машинописного текста, или любых других devdeps каждый раз, когда я тяну. npm i должен загрузить оба, что является намеченным, вменяемым и задокументированным поведением, поэтому я, честно говоря, не понимаю, почему вы говорите, что этот вопрос должен быть стандартным
Тристан Цара

Ответы:


307

Проверьте документы NPM для установки

С --productionфлагом (или когда для переменной среды NODE_ENV установлено значение production), npm не будет устанавливать модули, перечисленные в devDependencies. "

--only={prod[uction]|dev[elopment]}Аргумент будет вызывать либо только devDependencies или только не-devDependencies быть установлены независимо от NODE_ENV «.

Ты пробовала

npm install --only=dev

Если вы беспокоитесь о том, что ваш package.json может быть неправильным, лучше всего это сделать. Создайте новую папку и запустите:

npm init --yes

Затем:

npm install --save-dev brunch@^2.0.4
npm install --save-dev cssnano-brunch@^1.1.5
npm install --save-dev javascript-brunch@^1.8.0
npm install --save-dev sass-brunch@^1.9.2
npm install --save-dev uglify-js-brunch@^1.7.8
npm install jquery@^2.1.4 --save

И тебе должно быть хорошо идти! В противном случае, будет продолжать публиковать другие варианты.

Проверьте свою конфигурацию npm:

npm config list

npm получает свои параметры конфигурации из командной строки, переменных среды и файлов npmrc. Поэтому проверьте переменные окружения и файл npmrc .

Все еще не удается?

Хорошо, создайте новую папку, в идеале где-нибудь еще в вашей файловой системе. то есть. не в той же иерархии папок. Например, C: \ myNewFolder - чем ближе к базовому диску C: тем лучше.

Затем запустите:

npm init --yes

Теперь запустите:

npm install underscore --save

и наконец:

npm install mocha --save-dev

Все работает как положено?

Я пытаюсь понять, является ли ваша проблема глобальной, или что-то локальное по отношению к предыдущей папке и зависимостям.


Тристан - это помогает вашей ситуации? Пожалуйста, можете ли вы пометить ответ как правильный, или дайте мне знать результат попытки выше?
arcseldon

2
npm install --only = dev устанавливает devdeps, но я бы хотел установить и deps, и devdeps одновременно. package.json вроде бы в порядке, так как его воссоздание ничего не меняет. Прав ли я, что NODE_ENV существует как глобально, как значение по умолчанию, так и локально, как значение для проекта? Где я могу проверить и изменить эти значения в окнах (я посмотрел, и у меня нет системной переменной NODE_ENV)
Тристан Цара

@TristanTzara - я работаю почти исключительно на MAC в эти дни. Однако, из воспоминаний о прошедших днях (годы назад в NT и XP) - можете ли вы напечатать что-то вроде «set» в окне командной строки ... Еще перейдите к чему-то вроде «Свойства системы» -> «Дополнительно» -> «Переменные среды» и проверьте свои записи там. , Вы ищете "ключ" с NODE_ENV. Я буду Google сейчас для варианта Windows, но опубликовал это на случай, если это поможет.
arcseldon

Ссылка здесь - winaero.com/blog/...
arcseldon

@TristanTzara - это приятно знать. Одна мысль, проверьте все родительские каталоги выше вашего каталога, который не работает. Ищите существующую папку node_modules ... npm будет искать вверх при попытке разрешить зависимость, и это может быть чем-то странным, как если бы он подбирал существующий установленный модуль дальше по дереву каталогов и поэтому отказывался устанавливать ваш в дочерней папке , Обычное место находится прямо под вашим домашним каталогом. Удачи и спасибо за подтверждение моего ответа: D
arcseldon

85

Проверьте, установлено ли значение производственной конфигурации npm на true. Если это значение равно true, оно пропустит зависимости dev.

Бегать npm config get production

Чтобы установить это: npm config set -g production false


Интересно, если где-то между npm 5.x и npm 6.x, если значение не было установлено, по умолчанию становится, trueа не false?
Джеймс Перих

38

убедитесь, что переменная env не NODE_ENVустановлена ​​в «production».

Если вы это сделаете, зависимости dev не будут установлены без --devфлага


Я посмотрел на свои системные переменные, и у меня даже этого нет. Может я смотрю не на то место?
Тристан Цара

13
Обратите внимание, что npm install --devустановка devDependencies рекурсивно . Это почти никогда не то, что вы хотите, и на самом деле не рекомендуется .
Wonko

Спасибо. Я не знал, что это повлияет на обычную установку npm, но это логика. :)
Lothre1

6
Использование --devопции не рекомендуется. Используйте --only=devвместо этого
Сарат Ак

16

У меня был package-lock.jsonфайл из старой версии моего package.json, я удалил его, а затем все установилось правильно.


Бинго! Это решило мою проблему. Похоже, мы должны были совершить это в репо.
рандом или

9

У меня была похожая проблема. npm install --only=devне работал, и ни один не сделал npm rebuild. В конечном итоге мне пришлось удалить node_modulesи снова package-lock.jsonзапустить npm install. Это исправило это для меня.


7

Вы можете использовать короткий путь для установки зависимостей только для разработки следующим образом:

npm i -D <dependencies-names>

лучший ответ. Шпульд будет на вершине
wwwwwwwwwwww

6

Убедитесь, что ваш package.jsonдействителен ...

У меня была следующая ошибка ...

npm WARN Invalid name: "blah blah blah"

и что, аналогично, вызвано devDependenciesне быть установленным.

К вашему сведению, изменив package.json«имя», чтобы blah-blah-blahисправить это.


0

У меня та же проблема, потому что я установил NODE_ENV=productionвремя сборки Docker. Затем я добавляю еще один npm install --only=dev. Все отлично работает Мне нужны devDependencies для сборки модулей TypeSciprt

RUN npm install
RUN npm install --only=dev
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.