Je n'ai pas compris la commande npm install
dans les articles sur le net, mais je voulais être diplômé de cet état, j'ai donc posté cet article sous forme de mémorandum.
Je parlerai principalement de la commande npm install
, mais j'aimerais également aborder certaines des bases de la discussion sur npm, telles que package.json et node_modules.
Le but de cet article est de comprendre le comportement des quatre commandes npm install
suivantes et de vous aider à utiliser ces quatre commandes en fonction de vos besoins.
npm install
npm install -g <package>
npm install <package>
npm install -D <package>
En d'autres termes, ne faites plus correctement "npm install".
# Node.Vérifiez la version de js
$ node -v
v14.13.1
#Vérifiez la version de npm
$ npm -v
6.14.8
À propos, la mise à jour de npm elle-même est la commande suivante. Soyez conscient de la version npm de l'article auquel vous faites référence, car npm se comporte de manière assez différente dans les différentes versions principales.
#mise à jour npm
$ npm update -g npm
Si vous ne comprenez pas ce domaine, vous finirez par faire correctement npm install
, donc je vais d'abord l'expliquer.
Si vous le connaissez, vous pouvez l'ignorer.
Node.js Node.js est un JavaScript qui s'exécute côté serveur.
npm npm (Node Package Manager) est un outil (Manager) qui gère les packages Node.js.
Un package Node.js est une collection de fonctions utiles (divers frameworks et bibliothèques) préparées à l'avance.
yarn
yarn est un gestionnaire de packages compatible avec npm sorti en 2016.
Je n'aborderai pas la commande de fil cette fois, mais je suis très satisfait des opinions suivantes. Pour votre information.
Au fait: il y a Yarn développé par Facebook comme une CLI similaire. Il a été conçu pour compenser diverses lacunes de npm (telles que la vitesse) et est très populaire. Le package npm README mentionne souvent à la fois comment installer avec npm et yarn, et dit parfois "Je recommande d'utiliser yarn". Cependant, npm a également été amélioré, et je ne pense pas qu'il y ait beaucoup d'intérêt à installer et à utiliser du fil. Surtout pour les débutants, l'utilisation d'outils non standard n'est pas recommandée car cela augmentera le gaspillage d'apprentissage.
[Pour les débutants] Compréhension conceptuelle de NPM et package.json (extrait) https://qiita.com/righteous/items/e5448cb2e7e11ab7d477
package.json
package.json est un fichier utilisé pour gérer son propre package (= projet lui-même) dans le développement d'applications JavaScript basé sur Node.js.
L'exécution de la commande npm init
créera package.json.
package-lock.json En bref, il s'agit d'un fichier qui décrit le résultat de l'installation d'un package à l'aide de package.json. Je vais omettre l'explication cette fois, mais si vous voulez en savoir plus, veuillez vous référer au lien [Référence].
【référence】 Qu'est-ce que package-lock.json?
npm init
Vous pouvez généralement créer package.json avec la commande touch, mais en gros, vous pouvez créer package.json en exécutant la commande npm init
.
([Déraillement] Que se passe-t-il si je ne fais pas npm init?)
#Répertoire vide vide
$ ls
(Pas de sortie standard)
#package par npm init.Créer json (poser une question, mais une fois que tout passe avec Entrée= npm init -y Même comportement que lors de l'exécution de la commande)
$ npm init
# package.json a été créé
$ ls
package.json
La valeur initiale de package.json est la suivante.
package.json
{
"name": "<current directory name>",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
Il existe différents éléments dans package.json, mais les données telles que nom
, version
, description
, mots-clés
, auteur
, licence
ne sont que des métadonnées de votre propre package (= projet lui-même). Oui, si vous ne publiez pas votre propre package (= projet lui-même), vous n'avez pas à vous en soucier.
Si vous supprimez environ 4 des dépendances
, devDependencies
, scripts
, config
, je pense qu'il n'y a pas de problème si vous vérifiez et définissez si nécessaire.
【référence】 Structure de package.json
Les packages publiés (tels que les bibliothèques et les frameworks) peuvent être installés avec la commande npm
.
L'installation d'un package avec la commande npm
dans le répertoire où se trouve package.json mettra automatiquement à jour package.json.
De plus, ** les humains ne modifient pas directement package.json. ** **
** Tout mettre à jour via la commande npm
. (Important) **
node_modules node_modules est le répertoire où sont installés divers packages installés basés sur package.json.
Tant que vous avez package.json, vous pouvez générer node_modules en exécutant la commande npm install
.
Par conséquent, il s'agit généralement du répertoire spécifié dans .gitignore
.
npm install
C'est le sujet principal de cet article.
Exécutez la commande npm install
pour installer le package sur node_modules.
Cette commande est npm install
, mais comme il existe différents types et que c'est compliqué, je vais l'expliquer en détail.
** Lors de l'exécution sans arguments **
#Exécution sans argument (package.Exécuter dans le répertoire contenant json)
npm install
** Installation globale **
#Installation globale
npm install -g <package>
npm install --global <package>
** Installation locale **
#Installation locale
# package.Lors de l'ajout de dépendances json (dans npm v4 et inférieur)--save (= -S)Option requise, non requise dans npm v5 et supérieur car il s'agit de la valeur par défaut)
npm install <package>
npm install --save <package> #Pas besoin d'utiliser car c'est une option incluse par défaut
npm install -S <package> #Pas besoin d'utiliser car c'est une option incluse par défaut
# package.Lors de l'ajout aux devDependencies de json--save-dev (= -D)
npm install --save-dev <package>
npm install -D <package>
** Installation versionnée **
#Spécification de version
npm install <package>@x.y.z #Lors de la spécification de la version
npm install <package>@latest #Lors de la spécification de la dernière version (@Si vous ne spécifiez pas la dernière version, la dernière version sera installée.)
npm install
Il est plus facile de comprendre le comportement lors de l'exécution de la commande npm install
sans arguments en le séparant de npm install <package>
avec des arguments.
** Lorsque la commande npm install
sans argument est exécutée, le package qui y est décrit est installé dans node_modules (destination d'installation) en fonction des informations décrites dans package.json dans le répertoire courant. ** **
** Le timing à utiliser est "quand package.json est partagé et node_modules n'est pas créé" ou "quand package.json est mis à jour". ** **
De plus, avant d'exécuter la commande npm install
, il est nécessaire de décrire à l'avance les informations sur le package à installer dans package.json.
Ensuite, les informations sur le package dans ce package.json sont décrites en exécutant la commande npm install <package>
avec des arguments.
npm install <package>
Il peut être grossièrement divisé en installation globale et installation locale. De plus, même dans une installation locale, il peut être divisé en deux selon la destination de description de package.json.
Dans l'ensemble, il existe trois types, un pour une installation globale et deux pour une installation locale.
commander | Classement majeur | package.Où écrire json |
---|---|---|
npm install -g <package> |
Installation globale | - |
npm install <package> |
Installation locale | dependencies |
npm install -D <package> |
Installation locale | devDependencies |
À propos, «l'installation globale» et «l'installation locale» sont installées dans l'environnement de votre propre PC.
Avec l'installation globale, vous pouvez exécuter les packages (commandes) installés n'importe où dans votre environnement PC.
Cependant, même si vous installez globalement, si vous gérez plusieurs versions de Node.js avec nodebrew
etc., les packages avec npm install -g <package>
dans chaque version sont gérés comme des packages différents. Veuillez noter que ce sera fait.
【référence】 [Npm] Confirmation de la destination d'installation du package (liste npm)
** Comportement global de l'installation **
#La commande cowsay ne peut pas être exécutée car elle n'est pas installée.
$ cowsay "hoge"
zsh: command not found: cowsay
#Installation globale de la commande cowsay
$ npm install -g cowsay
$ cowsay "hoge"
______
< hoge >
------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
L'installation locale permet d'exécuter des packages (commandes) s'ils se trouvent dans le même répertoire que node_modules.
【référence】 Comment exécuter un package de commande installé localement avec npm avec CLI (npm-srcipts, npx)
-D
)#Installez le package approprié (cowsay)
$ npm install cowsay
+ [email protected]
#Vous pouvez voir que cowsay a été ajouté à l'élément de dépendances
$ cat package.json
{
(réduction)
+ "dependencies": {
+ "cowsay": "^1.4.0"
+ },
(réduction)
}
# node_Puisqu'il est installé dans des modules, il peut être exécuté en passant par le chemin
$ ./node_modules/.bin/cowsay "hoge"
______
< hoge >
------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
-D
)#Package approprié (dactylographié)-Installer avec l'option D
$ npm install -D typescript
+ [email protected]
#Vous pouvez voir que le dactylographie de l'élément devDependencies a été ajouté.
$ cat package.json
{
(réduction)
"dependencies": {
"cowsay": "^1.4.0"
},
+ "devDependencies": {
+ "typescript": "^4.0.3"
+ },
(réduction)
}
# -Même avec l'option D, cela ne change pas de nœud_Puisqu'il est installé dans des modules, il peut être exécuté en passant par le chemin
$ ./node_modules/.bin/tsc --version
Version 4.0.3
Donc, lors de l'installation d'un package, dois-je l'installer dans ** installation globale ** ou ** installation locale **?
En fonction de la situation **, vous devez éviter l'installation globale dans les nuages sombres. ** **
Les packages installés globalement ne peuvent pas être utilisés dans des environnements différents.
Par exemple, si vous achetez un nouveau PC, vous ne pourrez pas utiliser le package et vous ne pourrez pas utiliser le package sur le PC de quelqu'un d'autre.
À ce moment-là, si vous ne partagez que le package.json créé par l'installation locale, vous pouvez utiliser le même package dans n'importe quel environnement en exécutant simplement npm install
.
** Je pense qu'il est sûr d'installer globalement uniquement le package "Je veux utiliser cette commande à tout moment, n'importe où dans n'importe quel répertoire" et d'installer localement les autres. ** **
-D
doit être ajoutée lors de l'installation locale** Généralement, utilisez npm install -D <package>
pour les packages qui ne sont utilisés que dans l'environnement de développement, et npm install <package>
pour les packages qui ne le sont pas. ** **
Vous pouvez installer npm install
, qui ne prend pas d'argument de nom de package, sur node_modules en ajoutant l'option --production
, sauf pour les packages installés parnpm install -D <package>
.
En ajoutant l'option --production
de cette manière, vous pouvez exclure les packages qui ne sont utilisés que dans l'environnement de développement, vous n'avez donc pas à installer des packages qui ne sont pas référencés pendant le déploiement de production.
Les différences entre la présence et l'absence de l'option -D
lors de l'installation locale sont résumées ci-dessous.
Commande à exécuter | package.Où écrire json | Comment utiliser chacun |
---|---|---|
npm install <package> |
dependencies |
Packages qui sont également utilisés en dehors de l'environnement de développement ex) express |
npm install -D <package> |
devDependencies |
Packages utilisés uniquement dans l'environnement de développement ex) eslint |
De plus, la différence entre la présence et l'absence de l'option --production
au moment de l'exécution de npm install
qui ne prend pas l'argument du nom du package est résumée comme suit.
Commande à exécuter | Cible d'installation | Moment d'exécution |
---|---|---|
npm install |
・dependencies ・ devDependencies |
Environnement de développement |
npm install --production |
・dependencies seulement |
Lorsque vous ne souhaitez pas installer de packages qui ne sont utilisés que dans l'environnement de développement tel que l'environnement de production |
J'ai beaucoup écrit, mais c'est au cas par cas, donc je pense que vous devriez y penser quand vous faites réellement npm install --production
.
【référence】 [Package.json] Considérez comment utiliser correctement les dépendances et devDependencies
Le moment d'utilisation de chaque commande npm install
est résumé ci-dessous.
commander | Délai d'utilisation |
---|---|
npm install |
Package nouveau ou mis à jour.nœud basé sur json_Lors de la création de modules |
npm install -g <package> |
Lors de l'installation globale (=Lorsque vous souhaitez pouvoir utiliser la commande dans n'importe quel répertoire) |
npm install <package> |
package.Je souhaite installer localement sur json (=Lors de l'ajout d'un package (que vous souhaitez utiliser uniquement dans ce répertoire) (un package également utilisé dans l'environnement de production) |
npm install -D <package> |
package.Je souhaite installer localement sur json (=Lors de l'ajout d'un package (que vous souhaitez utiliser uniquement dans ce répertoire) (un package qui n'est utilisé que dans l'environnement de développement) |
Comment était-ce?
Vous pouvez maintenant utiliser correctement les quatre commandes npm install
suivantes.
npm install
npm install -g <package>
npm install <package>
npm install -D <package>
Remarques sur la gestion des versions de Node.js (nodebrew, nodenv) https://qiita.com/sugurutakahashi12345/items/20803f553b5716c13902
[Npm] Confirmation de la destination d'installation du package (liste npm) https://qiita.com/sugurutakahashi12345/items/8820b09db0dc1507f563
Une note sur le versionnage sémantique https://qiita.com/sugurutakahashi12345/items/68e9dfb11e84d20acc6d
À propos de tilda ^ et carryt ~ décrits dans package.json https://qiita.com/sugurutakahashi12345/items/0876ce674587515c66ba
Qu'est-ce que package-lock.json? https://qiita.com/sugurutakahashi12345/items/1f6bb7a372b8263500e5
Et si je ne npm init? https://qiita.com/sugurutakahashi12345/items/1049a33b86225f6345fe
Comment exécuter une commande avec CLI pour un package installé localement avec npm (npm-srcipts, npx) https://qiita.com/sugurutakahashi12345/items/b814a09b65d8852226ad
Lorsque le nom du package et la commande sont différents dans npx (npx -p <package> -c" <commond> "
)
https://qiita.com/sugurutakahashi12345/items/329e0cdbaf337edb81d3
npm-scripts pre, post prefix https://qiita.com/sugurutakahashi12345/items/91a133abacfc38b3d7a7
Exécution séquentielle / parallèle de npm-scripts (npm-run-all) https://qiita.com/sugurutakahashi12345/items/2a17a3cdfbc4a7e5e4eb
Comment mettre à niveau le package décrit dans package.json [npm-check-updates, obsolète] https://qiita.com/sugurutakahashi12345/items/df736ddaf65c244e1b4f
Comment utiliser la configuration de package.json https://qiita.com/sugurutakahashi12345/items/357fc6c2ae04f48b2076
Recommended Posts