web-dev-qa-db-fra.com

Comment empêcher l'installation de modules NPM "devDependencies" pour Node.js (package.json)?

J'ai ceci dans mon fichier package.json (version abrégée):

{
  "name": "a-module",
  "version": "0.0.1",
  "dependencies": {
    "coffee-script":      ">= 1.1.3"
  },
  "devDependencies": {
    "stylus":             ">= 0.17.0"
  }
}

J'utilise NPM version 1.1.1 sur Mac 10.6.8.

Lorsque j'exécute la commande suivante à partir de la racine du projet, elle installe à la fois le dependenciesetdevDependencies:

npm install

J'avais l'impression que cette commande a installé le devDependencies:

npm install --dev

Comment puis-je faire en sorte que npm install installe uniquement dependencies (ainsi, l'environnement de production ne reçoit que ces modules), tandis que quelque chose comme npm install --dev installe à la fois dependencies et devDependencies?

517
Lance Pollard

La commande npm install installe le devDependencies avec un autre __dependencies lorsqu’il est exécuté dans un répertoire de package, dans un environnement de développement (valeur par défaut).

Utilisez npm install --only=prod (ou --only=production) pour installer uniquement dependencies, et pas devDependencies,regardless sans la valeur de la variable d’environnement NODE_ENV.

Source: npm docs

Remarque: Avant la v3.3.0 de npm (2015-08-13), l'option s'appelait --production, c'est-à-dire npm install --production.

727
Rohan Singh

Je rencontre aussi ce problème! L'installation de npm est quelque peu déroutante et les publications Web continuent à afficher les indicateurs -d/- dev comme s'il existait un mode d'installation explicite de "développement".

  • npm install installera les deux " dépendances " et " devDependencies "

  • npm install --production installera seulement " dépendances "

  • npm install --dev installera uniquement " devDependencies "

212
smertrios

La nouvelle option est:

npm install --only=prod

Si vous souhaitez installer uniquement devDependencies:

npm install --only=dev
123
Cloxure

Si vous lisez ceci POST en 2016, veuillez réaliser ce que vous voulez en utilisant

--only={prod[uction]|dev[elopment]} 

l’argument ne provoquera l’installation que de devDependencies ou de non-devDependencies quel que soit le NODE_ENV.

à partir de: https://docs.npmjs.com/cli/install

40
wzr1337

Si vous avez déjà installé toutes vos dépendances et que vous souhaitez éviter de télécharger à nouveau vos packages de production à partir de NPM, vous pouvez simplement taper:

npm Prune --production

Cela supprimera vos dépendances dev de votre dossier node_modules, ce qui est utile si vous essayez d'automatiser un processus en deux étapes tel que

  1. Webpack mon projet, en utilisant des dépendances dev
  2. Construire une image Docker en utilisant uniquement des modules de production

Exécuter npm Prune entre les deux vous évitera de tout réinstaller!

25
piercebot

Lors de l'utilisation de "npm install", les modules sont chargés et disponibles dans toute votre application, qu'il s'agisse de "devDependencies" ou de "dépendances". Somme de cette idée: tout ce que votre package.json définit comme une dépendance (n'importe quel type) est installé dans node_modules.

Le but de la différence entre les dépendances/devDependencies/optionalDependencies est ce que les utilisateurs de votre code peuvent faire avec npm pour installer ces ressources.

Selon la documentation: https://npmjs.org/doc/json.html ...

Si une personne a l'intention de télécharger et d'utiliser votre module dans son programme, elle ne veut probablement pas ou n'a pas besoin de télécharger et de créer le test externe ou la structure de documentation que vous utilisez.

Dans ce cas, il est préférable de répertorier ces éléments supplémentaires dans un hachage devDependencies.

Ces choses seront installées chaque fois que l'indicateur de configuration --dev est défini. Cet indicateur est défini automatiquement lors de la création du lien npm ou de l'installation npm à partir de la racine d'un paquet. Il peut être géré comme tout autre paramètre de configuration npm. Voir config (1) pour plus d'informations à ce sujet.

Cependant, pour résoudre cette question, si vous souhaitez installer UNIQUEMENT les "dépendances" à l'aide de npm, la commande suivante est la suivante:

npm install --production

Cela peut être confirmé en regardant le commit de Git qui a ajouté ce filtre (ainsi que d'autres filtres [listés ci-dessous] pour fournir cette fonctionnalité).

Filtres alternatifs utilisables par npm:

--save          => updates dependencies entries in the {{{json}}} file
--force         => force fetching remote entries if they exist on disk 
--force-latest  => force latest version on conflict
--production    => do NOT install project devDependencies
--no-color      => do not print colors

@dmarr essayez d'utiliser npm install --production

18
creatovisguru

npm installera les dépendances de dev lors de l'installation à partir d'un paquet (s'il existe un package.json dans le répertoire en cours). S'il provient d'un autre emplacement (registre npm, git repo, emplacement différent sur le système de fichiers), il installe uniquement les dépendances.

15
Kevin Cox

J'ai constaté qu'en essayant d'installer des dépendances de dev pour un paquet contenant un addon de noeud, vous ne pouvez pas éviter de construire l'addon lors de l'exécution de npm install --dev même si vous voulez simplement installer devDependencies. Donc, je devais faire le tour de NPM:

node -e 'console.log( Object.keys( require( "./package.json" ).devDependencies ) );' | \
sed  -e "s/^[^']*'//" -e "s/'.*$//" | \
xargs npm install

Ou, mieux (et plus succinctement) encore,

node -e 'Object.keys( require( "./package.json" ).devDependencies )
.map( function( item ){ console.log( item ) } );' | xargs npm install
2
Gabriel Schulhof

Utilisez npm install packageName --save ceci ajoutera un paquetage dans dépendances, si vous utilisez npm install packageName --save-dev, alors il devDependencies.

npm install packageName --save-dev devrait être utilisé pour ajouter des packages à des fins de développement. C'est comme ajouter des paquets TDD (Chai, Moka, etc.). Qui sont utilisés en développement et non en production.

2
Sandip Nirmal

Besoin d'ajouter à la réponse choisie: À partir de maintenant, npm install dans un répertoire de paquetages (contenant package.json) installera devDependencies, alors que npm install -g ne les installera pas.

2
ack

Maintenant, il y a un problème si vous avez package-lock.json avec npm 5+. Vous devez le supprimer avant d'utiliser npm install --production.

1
Erich Stark

Il est à noter que vous pouvez utiliser la variable d'environnement NODE_ENV pour obtenir le même résultat. Particulièrement utile si vous conteneurisez votre application Node (par exemple, Docker).

NODE_ENV=production npm install

Le code ci-dessus installera toutes vos dépendances à l’exception de celles de dev (c.-à-d. devDependenciesname__).

si vous devez utiliser des variables d’environnement dans votre Dockerfilename__, vous pouvez trouver plus d’informations ici .

Les variables d'environnement sont faciles à écraser à tout moment (par exemple, si vous voulez exécuter votre suite de tests, par exemple sur Travis CI). Si c'était le cas, vous pourriez faire quelque chose comme ceci:

docker run -v $(pwd):/usr/src/app --rm -it -e NODE_ENV=production node:8 npm install

Documentation NPM ici

production

  • Par défaut: false
  • Type: Boolean Définissez sur true pour s'exécuter en mode "production".

    1. devDependencies n'est pas installé au plus haut niveau lors de l'exécution de l'installation npm locale sans aucun argument.
    2. Définissez le paramètre NODE_ENV = "production" pour les scripts de cycle de vie.

Bonne conteneurisation =)

1
Francesco Casula
npm install --dev will install dev dependencies

Et, comme pour la question d'installer uniquement des dépendances, la commande suivante vous aidera

npm install --prod will install dependencies
0
karthiks416

npm install --production est le bon moyen d'installer les modules de nœuds nécessaires à la production. Consultez la documentation pour plus de détails

0
Rubin bhandari