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 dependencies
etdevDependencies
:
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
?
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
.
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 "
La nouvelle option est:
npm install --only=prod
Si vous souhaitez installer uniquement devDependencies:
npm install --only=dev
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
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
Exécuter npm Prune
entre les deux vous évitera de tout réinstaller!
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
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.
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
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.
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.
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
.
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. devDependencies
name__).
si vous devez utiliser des variables d’environnement dans votre Dockerfile
name__, 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
production
- Par défaut: false
Type: Boolean Définissez sur true pour s'exécuter en mode "production".
- devDependencies n'est pas installé au plus haut niveau lors de l'exécution de l'installation npm locale sans aucun argument.
- Définissez le paramètre NODE_ENV = "production" pour les scripts de cycle de vie.
Bonne conteneurisation =)
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
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