Comment rétrécir les devDependends, mais ne les installez que si nécessaire?

Je dois un devDependencies nombre de devDependencies pour exécuter une suite de tests et avoir des dépendances de production verrouillées avec npm shrinkwrap . Le problème est que lorsque je lance npm install , seules les dépendances de production sont installées. Pour installer devDependencies , je dois supprimer npm-shrinkwrap.json et le relancer.

Maintenant, si shrinkwrap contient également des devDependencies , ils sont installés en production, où ils ne sont pas requirejs. Il devrait sûrement y avoir des arguments en ligne de commande pour forcer l’installation des seules dépendances normales?

Septembre 2016:

Comme d’autres l’ont également mentionné, d’importants efforts ont été déployés pour améliorer la fonction de rétraction à partir de npm v3.10.8 .

Grâce à cela , il sera possible de garder vos devDependencies verrouillés lors de l’installation des dépendances de production uniquement:

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

2013 réponse:

Comme indiqué dans les documents du NPM :

npm shrinkwrap étant destiné à verrouiller vos dépendances pour une utilisation en production, les devDependencies ne seront pas incluses à moins que vous ne définissiez explicitement le drapeau --dev lorsque vous exécutez npm shrinkwrap. Si devDependencies installé est exclu, alors npm imprimera un avertissement. Si vous voulez qu’ils soient installés avec votre module par défaut, envisagez plutôt de les append aux dépendances.

Fondamentalement, ou vous verrouillez tous les deps, ou seulement les deps de production.

Ne pas même exécuter npm install --dev ou npm install --force peut transcender la fonctionnalité de rétrécissement.

Il semble que cette fonctionnalité ait été ajoutée récemment à la version 3.3 du client npm par le journal des modifications.

Vous pourrez maintenant lancer npm install --only=prod pour obtenir l’effet souhaité.

EDIT 2016/09/13

J’ai testé npm v3.10.8 et cette fonctionnalité fonctionne désormais comme prévu. Nous avons rétracté nos devDependencies et ne pouvons installer que des dépendances prod lors du déploiement.


Je pense que cela vaut la peine de mentionner que cette fonctionnalité devrait commencer à fonctionner comme prévu très bientôt. Selon ce problème de github, des tonnes de personnes se heurtaient au même problème et, selon cette requête , ce sera dans la prochaine version (prévue pour 2016-09-08).

Avec la requête pull fusionnée, il ne vous rest plus qu’à:

 npm i --only=prod 

Ceci est corrigé dans npm 3.10.8 ; npm install --production ne doit pas installer de deps dans un film rétractable créé par npm shrinkwrap --dev : https://github.com/npm/npm/releases/tag/v3.10.8

En ce qui concerne npm 5 (j’ai essayé sur 5.5.1 et 5.6.0), l’ option –production ( –only = prod ) est problématique.

Lorsque package-lock.json existe dans le dossier,

 npm shrinkwrap --production 

change simplement le nom de fichier en npm-shrinkwrap.json .

Comment j’ai réussi à résoudre ce problème consiste à exécuter:

 npm prune --production 

puis lancez:

 npm shrinkwrap --production