Je souhaite terminer correctement l'installation de npm [2020]

introduction

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.

Objectif

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.

En d'autres termes, ne faites plus correctement "npm install".

Environnement d'exploitation

# 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

Ce que vous devez savoir avant d'expliquer l'installation de 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

Relation entre npm et 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.

Liste des commandes fréquemment utilisées pour le moment

** 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.)

Aucun argument 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.

Avec l'argument 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.

Installation globale

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 |
                ||     ||

Installation locale

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)

Comportement de l'installation locale (sans l'option -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 |
                ||     ||

Comportement de l'installation locale (avec l'option -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

Utilisation appropriée de l'installation globale et de l'installation locale

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. ** **

Cas où l'option -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 dependenciesseulement 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

Sommaire

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)

enfin

Comment était-ce? Vous pouvez maintenant utiliser correctement les quatre commandes npm install suivantes.


** Je publierai les URL des articles sur npm qui ne correspondent pas ici ↓ **

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

Je souhaite terminer correctement l'installation de npm [2020]
Je souhaite installer PHP 7.2 sur Ubuntu 20.04.
Exécuter R à partir de Java Je veux exécuter rJava
Je veux jouer avec Firestore de Rails
Je veux écrire rapidement de java vers sqlite
[Java] Je souhaite calculer la différence par rapport à la date
Je veux convertir des caractères ...
Je veux ajouter un appareil dans Rails, mais je ne peux pas grouper l'installation
[Android] Je souhaite obtenir l'auditeur à partir du bouton de ListView
Je veux écrire un joli build.gradle
Je souhaite éliminer les messages d'erreur en double
Je veux créer une application ios.android
Je souhaite utiliser DBViewer avec Eclipse 2018-12! !!
Je veux écrire un test unitaire!
Je veux jouer avec l'autorisation du répertoire Windows de WSL (ubuntu)
Je veux arrêter complètement les mises à jour Java
Je veux utiliser @Autowired dans Servlet
Je souhaite cibler les champs statiques sur @Autowired
Je veux faire du développement d'équipe à distance
Je veux obtenir uniquement l'heure à partir des données de type Time ...! [Strftime] * Notes supplémentaires
Je veux trier par délimiteur d'onglet avec ruby
[Swift] Je veux dessiner des lignes de quadrillage (carrés)
[Rails] J'ai essayé de faire passer la version de Rails de 5.0 à 5.2
Je souhaite envoyer un e-mail en Java.
[Ruby] Je veux faire un saut de méthode!
Je veux utiliser java8 forEach avec index
Je veux var_dump le contenu de l'intention
Je souhaite transmettre APP_HOME pour me connecter à Gradle
Je veux écrire une simple répétition d'une chaîne de caractères
Je souhaite concevoir une structure pour la gestion des exceptions
rsync4j --Je veux toucher rsync en Java.
Je veux être finalement même à kotlin
Je veux tronquer après la virgule décimale
Je veux réduire les erreurs simples. Pour vous commander.
Je souhaite effectuer un traitement d'agrégation avec spring-batch
[Rails] Je veux charger du CSS avec webpacker
Je souhaite supprimer un fichier géré par Git
Je veux obtenir la valeur en Ruby
Je veux afficher quel caractère une chaîne de caractères arbitraire apparaît à partir de la gauche
Mise à jour de Node.js avec nodebrew et script de la routine pour re-npm install -g
Je souhaite également utiliser Combine dans UIKit.
Je souhaite utiliser les fonctions pratiques de Clojure dans Kotlin
Je veux appeler une méthode d'une autre classe
Je veux faire quelque chose comme "cls" en Java
Je veux utiliser NetBeans sur Mac → Je peux l'utiliser!