Как разрезать devDependencies, но не устанавливать их, если это необходимо?

У меня есть куча devDependencies, необходимая для запуска набора тестов и блокировки производственных зависимостей с npm shrinkwrap. Проблема заключается в том, что при запуске npm install устанавливаются только производственные зависимости, чтобы установить devDependencies, я должен удалить npm-shrinkwrap.json и запустить его снова.

Теперь, если shrinkwrap содержит devDependencies, они устанавливаются на производство, где они не требуются. Разумеется, должны быть некоторые аргументы командной строки, чтобы принудительно устанавливать только обычные зависимости?

Ответ 1

Сентябрь 2016 года:

Как отмечали другие, были предприняты огромные усилия для улучшения функции усадки, начиная с npm v3.10.8.

Благодаря этому можно будет заблокировать devDependencies при установке только производственных зависимостей:

npm shrinkwrap --dev
npm install --only=prod

2013 ответ:

Как указано в документах NPM:

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

В принципе, или вы блокируете все депики или только производственные отпечатки.

Даже не работает npm install --dev или npm install --force может превзойти функциональность термоусадочной пленки.

Ответ 2

Похоже, эта функция была недавно добавлена ​​в v3.3 клиента npm за changelog

Теперь вы сможете запустить npm install --only=prod для достижения желаемого эффекта.

Ответ 3

РЕДАКТИРОВАТЬ 2016/09/13

Я тестировал npm v3.10.8, и эта функция теперь работает так, как ожидалось. Мы сократили наши devDependencies и можем устанавливать только зависимости prod при развертывании.


Я думаю, стоит упомянуть, что эта функция должна начинаться так, как ожидалось, очень скоро. Согласно этому github issue, тонны людей сталкивались с одной и той же проблемой, и в соответствии с этим pull, он будет в следующей версии (запланирован на 2016-09-08).

При объединении запроса на растяжение все, что вам нужно сделать, это:

npm i --only=prod

Ответ 4

Это исправлено в npm 3.10.8; npm install --production не следует устанавливать dev deps в shrinkwrap, созданный npm shrinkwrap --dev: https://github.com/npm/npm/releases/tag/v3.10.8

Ответ 5

Что касается npm 5 (я пробовал по 5.5.1 и 5.6.0), флаг - production (- only = prod) проблематичен.

Если в папке существует package-lock.json,

npm shrinkwrap --production

просто изменяет имя файла на npm-shrinkwrap.json.

Как мне удалось решить эту проблему, нужно запустить:

npm prune --production

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

npm shrinkwrap --production