npm install не встановить devDependpendes


256

У Windows чомусь під час запуску npm installвін не встановлюватиме devDependpend . AFAIK це повинен. Якщо я запускаю npm install --dev devDependitions встановлені. Я не розумію, чому npm installтакож не встановлюється devDependpendes , а встановлюється лише залежності. Що може бути причиною? Як я можу це виправити?

Можливо, щось не так з моїм пакетом.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модуль використовує його, а не розробляє його.
Константин Ван

Скажімо, ви пишете додаток, і вам потрібен плагін реєстратора або веб-пакет. це devdeps. їх потрібно встановити. npm не встановлює їх у деяких випадках.
Трістан Цара

1
Тобто, установка для devDependenciesпотрібна лише тоді, коли ви пишете пакет (додаток). Для його використання не потрібно devDependencies. Тому розумно devDependenciesвимагати встановлення додаткових прапорів. Якщо npm installвстановлено devDependencies за замовчуванням , користувачі також отримуватимуть зайві пакети.
Константин Ван

задокументована поведінка полягає в тому, що коли я роблю npm iв своїй папці, вона захоплює py package.jsonі встановлює і deps, і devdeps. Це так, як це призначено для роботи, і це має сенс (наприклад, коли я це роблю npm iпісля того, як git cloneя розраховую мати все, що мені потрібно, включаючи, наприклад, плагіни для веб-упаковки). Це питання стосується помилки, коли реальна поведінка відрізняється від призначеної. pls, подивіться на docs - docs.npmjs.com/cli/install . Існує прапор, щоб не встановлювати devdeps, але поведінка за замовчуванням - це їх встановлення, що має ідеальний сенс і те, що всі очікують
Tristan Tzara

Я не бачу жодних розумних причин, щоб змусити мене запам'ятати запуск іншої команди для встановлення, наприклад, плагіни webpack або typeScript type defs або будь-який інший devdeps кожен раз, коли я тягну. npm i повинні завантажувати обох, що є цілеспрямованою, розумною та документально підтвердженою поведінкою, тому я, чесно кажучи, не розумію, чому ви говорите, що це питання має бути стандартним
Трістан Цара

Відповіді:


305

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

З --productionпрапором (або коли змінна середовища NODE_ENV встановлена ​​у виробництві), npm не буде встановлювати модулі, перелічені у devDependitions. "

The --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 існує як у всьому світі, як значення за замовчуванням, так і локально, як значення для проекту? Де я можу перевірити і змінити ці значення у Windows (я подивився, і у мене немає системної змінної NODE_ENV)
Tristan Tzara

@TristanTzara - в ці дні я працюю майже виключно на MAC. Однак із спогадів про минулі дні (роки тому на NT та XP) - чи можете ви ввести щось на кшталт "встановити" у вікно командного рядка. Інакше перейдіть до чогось на зразок Властивості системи -> Додатково -> Змінні середовища та перевірте свої записи там . Ви шукаєте "ключ" за допомогою NODE_ENV. Зараз я перегляну Google для опції Windows, але опублікував це, якщо це допоможе.
arcseldon

Посилання тут - winaero.com/blog/…
arcseldon

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

85

Перевірте, чи встановлено значення npm config для виробництва. Якщо це значення вірно, воно буде пропускати через залежність від розробника.

Біжи npm config get production

Щоб встановити його: npm config set -g production false


Цікаво, якщо десь між npm 5.x і npm 6.x, якщо значення не було встановлено, за замовчуванням стане trueзамість false?
Джеймс Періх

38

переконайтеся, що у вас немає змінної env NODE_ENVна "виробництво".

Якщо це зробити, залежність від розробників не буде встановлена ​​без --devпрапора


Я переглянув мої системні змінні, і навіть у мене її немає. Може я дивлюся в неправильне місце?
Трістан Цара

13
Зверніть увагу, що npm install --devвстановлення devDependitions рекурсивно . Це майже ніколи не хочеться, а насправді застаріло .
Вонко

Дякую. Я не знав, що це вплине на звичайні установки 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не призвело до встановлення.

FYI, змінивши package.json"ім'я", щоб blah-blah-blahвиправити його.


0

У мене те саме питання, тому що я встановлював NODE_ENV=productionчас створення Докера. Потім додаю ще одну npm install --only=dev. Все працює добре. Мені потрібні devDependitions для побудови модулів TypeSciprt

RUN npm install
RUN npm install --only=dev
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.