npm install n'installera pas devDependencies

256

Sur Windows pour une raison quelconque, lorsque j'exécute, ilnpm install n'installera pas devDependencies . AFAIK ça devrait. Si je lance npm install --dev devDependencies sont installés. Je ne comprends pas pourquoi npm installn'installe pas trop devDependencies , mais installe uniquement les dépendances. Quelle pourrait être la raison? Comment puis-je le réparer?

Peut-être que quelque chose ne va pas avec mon package.json ? Il est répertorié ci-dessous s'il peut être utile:

{
  "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"
  }
}
Tristan Tzara
la source
5
Pourquoi avons-nous même besoin d'un correctif ? Ce devrait être la valeur par défaut! devDependenciessont littéralement des dépendances pour les développeurs du module . Je parie que la plupart d'entre nous npm installun module pour l'utiliser, plutôt que de le développer.
Константин Ван
Supposons que vous écriviez une application et que vous ayez besoin d'un enregistreur ou d'un plugin webpack. ce sont des devdeps. ceux-ci doivent être installés. npm ne les installe pas dans certains cas.
Tristan Tzara
1
Je veux dire, l'installation de devDependenciesn'est nécessaire que lorsque vous écrivez le package (application). Son utilisation ne nécessite pas le devDependencies. Il est donc raisonnable devDependenciesd'exiger l'installation de drapeaux supplémentaires. S'ils npm installétaient installés devDependencies par défaut , les utilisateurs recevraient également des packages redondants.
Константин Ван
le comportement documenté est que lorsque je le fais npm idans mon dossier, il saisit py package.jsonet installe à la fois deps et devdeps. C'est la façon dont il est censé fonctionner et cela a du sens (par exemple quand je le fais npm iaprès git cloneje m'attends à avoir tout ce dont j'ai besoin, y compris par exemple les plugins webpack). Cette question concerne un bogue, lorsque le comportement réel est différent de celui prévu. pls, jetez un œil à docs - docs.npmjs.com/cli/install . Il y a un indicateur pour ne pas installer les devdeps, mais le comportement par défaut est de les installer, ce qui est parfaitement logique et correspond à ce que tout le monde attend
Tristan Tzara
Je ne vois aucune raison valable de me faire penser à exécuter une autre commande pour installer par exemple des plugins webpack ou des défs de type dactylographié ou tout autre devdeps chaque fois que je tire. npm i devrait amorcer les deux, ce qui est le comportement voulu, sensé et documenté, donc je ne comprends vraiment pas pourquoi vous dites que ce problème devrait être une norme
Tristan Tzara

Réponses:

307

Vérifiez les documents NPM pour l' installation

Avec l' --productionindicateur (ou lorsque la variable d'environnement NODE_ENV est définie sur production), npm n'installe pas les modules répertoriés dans devDependencies. "

L' --only={prod[uction]|dev[elopment]}argument entraînera soit uniquement les devDependencies, soit uniquement les non-devDependencies à installer, quel que soit le NODE_ENV. "

As-tu essayé

npm install --only=dev

Si vous craignez que votre package.json soit incorrect, la meilleure chose à faire est la suivante. Créez un nouveau dossier et exécutez:

npm init --yes

Ensuite:

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

Et vous devriez être prêt à partir! Sinon, continuera à publier d'autres options.

Vérifiez votre configuration npm:

npm config list

npm obtient ses paramètres de configuration à partir de la ligne de commande, des variables d'environnement et des fichiers npmrc. Vérifiez donc les variables d'environnement et le fichier npmrc .

Toujours en échec?

Ok, créez un nouveau dossier, idéalement ailleurs sur votre système de fichiers. c'est à dire. pas dans la même hiérarchie de dossiers. Par exemple, C: \ myNewFolder - le plus proche de la base C: conduisez le mieux.

Exécutez ensuite:

npm init --yes

Maintenant, lancez:

npm install underscore --save

et enfin:

npm install mocha --save-dev

Est-ce que tout fonctionne comme prévu?

Ce que j'essaie de faire, c'est de comprendre si votre problème est global ou quelque chose de local par rapport au dossier et aux dépendances précédents.

arcseldon
la source
Tristan - est-ce que cela aide votre situation? S'il vous plaît pouvez-vous marquer la réponse comme correcte, ou bien faites-moi savoir le résultat de l'essai ci-dessus?
arcseldon
2
npm install --only = dev installe devdeps, mais j'aimerais installer à la fois deps et devdeps. package.json semble être correct, car sa recréation ne change rien. Ai-je raison de dire que NODE_ENV existe à la fois globalement, comme valeur par défaut et localement, comme valeur pour le projet? Où puis-je vérifier et modifier ces valeurs sur Windows (j'ai regardé et je n'ai pas de variable système NODE_ENV)
Tristan Tzara
@TristanTzara - je travaille presque exclusivement sur MAC ces jours-ci. Cependant, à partir des souvenirs des jours passés (il y a des années sur NT et XP) - pouvez-vous taper quelque chose comme "set" dans la fenêtre d'invite de commande. Sinon, allez dans quelque chose comme Propriétés système -> Avancé -> Variables d'environnement et vérifiez vos entrées là-bas . Vous recherchez une "clé" avec NODE_ENV. Je vais maintenant rechercher une option Windows sur google, mais j'ai posté cela au cas où cela aiderait.
arcseldon
Lien ici - winaero.com/blog/…
arcseldon
@TristanTzara - c'est bon à savoir. Une pensée, vérifiez tous les répertoires parents au-dessus de votre répertoire qui ne fonctionne pas. Recherchez un dossier node_modules existant ... npm recherchera vers le haut lorsque vous tentez de résoudre une dépendance et cela pourrait être quelque chose de bizarre comme s'il récupérait un module installé existant plus haut dans l'arborescence des répertoires, et refusait donc d'installer le vôtre dans le dossier enfant . L'endroit habituel est juste sous votre répertoire personnel. Bonne chance et merci d'avoir remercié ma réponse: D
arcseldon
85

Vérifiez si la valeur de production de npm config est définie sur true. Si cette valeur est vraie, elle ignorera les dépendances de développement.

Courir npm config get production

Pour le régler: npm config set -g production false

Shawn Mclean
la source
Je me demande si, quelque part entre npm 5.x et npm 6.x, si aucune valeur n'a été définie, la valeur par défaut devient trueplutôt que false?
James Perih
38

assurez-vous que la variable env n'est pas NODE_ENVdéfinie sur «production».

Si vous le faites, les dépendances de développement ne seront pas installées sans l' --devindicateur

Nir Levy
la source
J'ai jeté un œil à mes variables système et je n'ai même pas celui-ci là-bas. Peut-être que je regarde au mauvais endroit?
Tristan Tzara
13
Veuillez noter que npm install --devinstalle devDependencies de manière récursive . Ce n'est presque jamais ce que vous voulez et est en fait obsolète .
Wonko
Je vous remercie. Je ne savais pas que cela aurait un impact sur les installations régulières de npm, mais c'est logique. :)
Lothre1
6
L'utilisation de l' --devoption est déconseillée. Utilisez à la --only=devplace
Sarath Ak
16

J'avais un package-lock.jsonfichier d'une ancienne version de mon package.json, je l'ai supprimé puis tout s'est installé correctement.


la source
Bingo! Cela a résolu mon problème. On dirait que nous aurions dû commettre cela dans le repo.
aléatoire
9

J'avais un problème similaire. npm install --only=devn'a pas fonctionné, pas plus quenpm rebuild . En fin de compte, je devais supprimer node_moduleset package-lock.jsonet courir à npm installnouveau. Cela m'a arrangé.

programmeur obsessionnel
la source
7

Vous pouvez utiliser la méthode courte pour les dépendances d'installation uniquement pour le développement comme suit:

npm i -D <dependencies-names>
Ale
la source
meilleure réponse. Shpuld soit au top
wwwwwwwwwwww
6

Assurez-vous que votre package.jsonest valide ...

J'ai eu l'erreur suivante ...

npm WARN Invalid name: "blah blah blah"

et cela, de la même manière, a empêché devDependenciesl'installation.

Pour info, changer le package.json"nom" pour le blah-blah-blahcorriger.

Alex Gray
la source
0

J'ai le même problème car j'ai défini le NODE_ENV=productiontout en construisant Docker. Ensuite, j'en ajoute un de plus npm install --only=dev. Tout fonctionne bien. J'ai besoin des devDependencies pour construire des modules TypeSciprt

RUN npm install
RUN npm install --only=dev
Phat Tran Ky
la source