npm-install
Synthèse
npm install (avec no args, dans le répertoire des paquets)npm install <name>npm install <name><tag>npm install <name><version>npm install <name><version range>npm install <alias>@npm :<name>npm install <git-host><git-user><repo-name>npm install <git repo url>npm install <fichier tarball>. npm install <tarball url>npm install < npm install <folder>alias : npm i, npm addoptions communes :Description
Cette commande installe un paquet, et tous les paquets dont il dépend. Si lepaquet a un fichier package-lock ou shrinkwrap, l'installation des dépendances sera pilotée par celui-ci, avec un
npm-shrinkwrap.json
prenant la priorité si les deuxfichiers existent. Voir package-lock.json etnpm shrinkwrap
.Une
package
est :
- a) un dossier contenant un programme décrit par un
package.json
fichier - b) un tarball gzippé contenant (a)
- c) une url qui se résout en (b)
- d) une
<name>@<version>
qui est publiée sur le registre (voirregistry
) avec… (c) - e) une
<name>@<tag>
(voirnpm dist-tag
) qui pointe vers (d) - f) une
<name>
qui a une balise « latest » satisfaisant (e) - g) une
<git remote url>
qui se résout à (a)
.
Même si vous ne publiez jamais votre paquet, vous pouvez toujours obtenir beaucoup d’avantages de l’utilisation de npm si vous voulez juste écrire un programme node (a), etpeut-être si vous voulez aussi être capable de l’installer facilement ailleurs après l’avoir empaqueté dans un tarball (b).
-
npm install
(dans le répertoire package, pas d’arguments):Installer les dépendances dans le dossier node_modules local.
En mode global (ie, avec
-g
ou--global
ajouté à la commande),il installe le contexte de paquetage actuel (ie, le répertoire de travail actuel) comme un paquetage global.Par défaut,
npm install
installera tous les modules listés comme dépendants danspackage.json
.Avec le drapeau
--production
(ou lorsque la variable d’environnementNODE_ENV
est définie surproduction
), npm n’installera pas les modules listés dansdevDependencies
. Pour installer tous les modules répertoriés à la fois dansdependencies
etdevDependencies
lorsque la variable d’environnementNODE_ENV
est définie surproduction
,vous pouvez utiliser--production=false
.NOTE : Le drapeau
--production
n’a pas de signification particulière lors de l’ajout d’une dépendance à un projet. -
npm install <tarball file>
:Installer un paquet qui se trouve sur le système de fichiers. Remarque : si vous souhaitez simplement lier un répertoire dev à votre racine npm, vous pouvez le faire plus facilement en utilisant
npm link
.Conditions requises pour le Tarball:
-
Le nom du fichier doit utiliser
.tar
.tar.gz
, ou.tgz
comme extension. -
Le contenu du paquet doit résider dans un sous-dossier à l’intérieur du tarball (généralement, il est appelé
package/
). npm dépouille une couche de répertoire lors de l’installation du paquet (un équivalent detar x --strip-components=1
est exécuté). -
Le paquet doit contenir un fichier
package.json
avec des propriétésname
etversion
.Exemple:
npm install ./package.tgz
-
-
npm install <tarball url>
:Récupérer l’url du tarball, puis l’installer. Afin de distinguer cette option des autres, l’argument doit commencer par « http:// » ou « https:// »
Exemple :
npm install https://github.com/indexzero/forever/tarball/v0.5.6 -
npm install <name>
:Faites une installation
<name>@<tag>
, où<tag>
est la config « tag ». (Seeconfig
. La valeur par défaut de la config estlatest
.)Dans la plupart des cas, cela installera la version des modules tagués comme
latest
sur le registre npm.Exemple:
npm install sax -
npm install <alias>@npm:<name>
:Installer un paquet sous un alias personnalisé. Permet plusieurs versions d’un paquet de même nom côte à côte, des noms d’importation plus pratiques pour les paquets avec des noms autrement longs et l’utilisation des remplacements de git forksou des paquets npm forked comme remplacements. L’aliasing fonctionne uniquement sur votreprojet et ne renomme pas les paquets dans les dépendances transitives.Les alias doivent suivre les conventions de nommage énoncées dans
validate-npm-package-name
.Exemples:
npm install my-react@npm :reactnpm install jquery2@npm:jquery@2npm install jquery3@npm :jquery@3npm install npa@npm:npm-package-arg
npm install <folder>
:
Installer le paquet dans le répertoire en tant que lien symbolique dans le projet actuel.Ses dépendances seront installées avant d’être liées. Si <folder>
se trouve à la racine de votre projet, ses dépendances peuvent être hissées autoplevel node_modules
comme pour les autres types de dépendances.
`npm install`enregistre tout paquet spécifié dans `dependencies` par défaut.En outre, vous pouvez contrôler où et comment ils sont enregistrés avec quelquesflags supplémentaires :* `-P, --save-prod` : Le paquet apparaîtra dans vos `dépendances`. C'est ledéfaut sauf si `-D` ou `-O` sont présents.* `-D, --save-dev` : Le paquet apparaîtra dans vos `devDependencies`.* `-O, --save-optional` : Le paquet apparaîtra dans vos `optionalDependencies`.* `--no-save` : Empêche l'enregistrement dans les `dépendances`.Lorsque vous utilisez l'une des options ci-dessus pour enregistrer les dépendances dans votrepackage.json, il existe deux drapeaux supplémentaires et facultatifs :* `-E, --save-exact` : Les dépendances sauvegardées seront configurées avec uneversion exacte plutôt que d'utiliser l'opérateur semver range* `-B, --save-bundle` : Les dépendances enregistrées seront également ajoutées à votre liste `bundleDependencies`.De plus, si vous avez un `npm-shrinkwrap.json` ou un `package-lock.json` alors ilseront également mis à jour.<scope>` est facultatif. Le paquet sera téléchargé à partir du registreassocié à la portée spécifiée. Si aucun registre n'est associé àla portée donnée, le registre par défaut est supposé. Voir (/cli/v6/using-npm/scope).Note : si vous n'incluez pas le symbole @ sur votre nom de scope, npm vainterpréter cela comme un dépôt GitHub à la place, voir ci-dessous. Les noms des scopesdoivent également être suivis d'une barre oblique.Exemples :``bashnpm install saxnpm install githubname/reponamenpm install @myorg/privatepackagenpm install node-tap --save-devnpm install dtrace-provider --save-optionalnpm install readable-stream --save-exactnpm install ansi-regex --save-bundle``**Note** : S'il existe un fichier ou un dossier nommé `<nom>` dans le répertoire detravail actuel, alors il essaiera de l'installer, et n'essaiera derechercher le paquet par son nom que si celui-ci n'est pas valide.
npm install <name>@<tag>
:Installer la version du paquet qui est référencée par le tag spécifié.Si la balise n'existe pas dans les données du registre pour ce paquet, alors cette opération échouera.
Exemple :
npm install sax@latestnpm install @myorg/mypackage@latest
npm install <name>@<version>
:Installer la version spécifiée du paquet. Cette opération échouera si la version n'a pas été publiée dans le registre.
Exemple :
npm install [email protected]npm install @myorg/[email protected]
npm install <name>@<version range>
:Installer une version du paquet correspondant à la plage de versions spécifiée. Cela suivra les mêmes règles de résolution des dépendances décrites dans
package.json
.Notez que la plupart des plages de versions doivent être mises entre guillemets afin que votre shell les traite comme un seul argument.
Exemple:
npm install sax@"><0.2.0"npm install @myorg/privatepackage@"><0.2.0"
npm install <git remote url>
:Installe le paquet depuis le fournisseur git hébergé, en le clonant avec
git
.Pour une url distante git complète, seule cette url sera tentée.<protocole><hostname><path>
<protocol>
est un desgit
git+ssh
git+http
git+https
, ougit+file
.Si
#<commit-ish>
est fourni, il sera utilisé pour cloner exactement cecommit. Si le commit-ish a le format#semver:<semver>
<semver>
peut être n'importe quelle plage de semver valide ou version exacte, et npm cherchera tous les tagsou refs correspondant à cette plage dans le dépôt distant, un peu comme il le ferait pour une dépendance de registre. Si ni#<commit-ish>
ni#semver:<semver>
isspecified, alors la branche par défaut du dépôt est utilisée.Si le dépôt fait usage de submodules, ces submodules seront clonés également.
Si le paquet en cours d'installation contient un
prepare
script, sesdependencies
etdevDependencies
seront installés, et le preparescript sera exécuté, avant que le paquet ne soit empaqueté et installé.Les variables d'environnement git suivantes sont reconnues par npm et seront ajoutées à l'environnement lors de l'exécution de git :
GIT_ASKPASS
GIT_EXEC_PATH
GIT_PROXY_COMMAND
GIT_SSH
.
GIT_SSH_COMMAND
GIT_SSL_CAINFO
GIT_SSL_NO_VERIFY
Voir la page de manuel git pour plus de détails.
Exemples:
npm install git+ssh://[email protected]:npm/cli.git#v1.0.27npm install git+ssh://[email protected]:npm/cli#semver:^5.0npm install git+https://[email protected]/npm/cli.gitnpm install git://github.com/npm/cli.git#v1.0.27GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://[email protected]:npm/cli.git
npm install <githubname>/<githubrepo>
:
npm install github:<githubname>/<githubrepo>
:Installer le paquet à
https://github.com/githubname/githubrepo
en tentant de le cloner à l'aide degit
.Si
#<commit-ish>
est fourni, il sera utilisé pour cloner exactement cecommit. Si le commit-ish a le format#semver:<semver>
<semver>
peut être n'importe quelle plage de semver valide ou version exacte, et npm cherchera tous les tagsou refs correspondant à cette plage dans le dépôt distant, un peu comme il le ferait pour une dépendance de registre. Si ni#<commit-ish>
ni#semver:<semver>
ne sont spécifiés, alorsmaster
est utilisé.Comme pour les dépendances git régulières,
dependencies
etdevDependencies
seront installés si le paquet a un scriptprepare
, avant que le paquet ne soit terminé d'installer.Exemples:
npm install mygithubuser/myprojectnpm install github :mygithubuser/myproject
npm install gist:<gistID>
:Installer le paquet à
https://gist.github.com/gistID
en tentant de le cloner à l'aide degit
. Le nom d'utilisateur GitHub associé au gist estoptionnel et ne sera pas enregistré danspackage.json
.Comme pour les dépendances git régulières,
dependencies
etdevDependencies
seront installés si le paquet a un scriptprepare
, avant que le paquet ne soit terminé d'installer.Exemple:
npm install gist:
npm install bitbucket:<bitbucketname>/<bitbucketrepo>
:Installer le paquet à
https://bitbucket.org/bitbucketname/bitbucketrepo
en tentant de le cloner à l'aide degit
.Si
#<commit-ish>
est fourni, il sera utilisé pour cloner exactement cecommit. Si le commit-ish a le format#semver:<semver>
<semver>
peut être n'importe quelle plage de semver valide ou version exacte, et npm cherchera tous les tagsou refs correspondant à cette plage dans le dépôt distant, un peu comme il le ferait pour une dépendance de registre. Si ni#<commit-ish>
ni#semver:<semver>
ne sont spécifiés, alorsmaster
est utilisé.Comme pour les dépendances git ordinaires,
dependencies
etdevDependencies
seront installés si le paquet a un scriptprepare
, avant que le paquet ne soit terminé d'installer.Exemple:
npm install bitbucket:mybitbucketuser/myproject
npm install gitlab:<gitlabname>/<gitlabrepo>
:Installer le paquet à
https://gitlab.com/gitlabname/gitlabrepo
en tentant de le cloner à l'aide degit
.Si
#<commit-ish>
est fourni, il sera utilisé pour cloner exactement cecommit. Si le commit-ish a le format#semver:<semver>
<semver>
peut être n'importe quelle plage de semver valide ou version exacte, et npm cherchera tous les tagsou refs correspondant à cette plage dans le dépôt distant, un peu comme il le ferait pour une dépendance de registre. Si ni#<commit-ish>
ni#semver:<semver>
ne sont spécifiés, alorsmaster
est utilisé.Comme pour les dépendances git ordinaires,
dependencies
etdevDependencies
seront installés si le paquet a un scriptprepare
, avant que le paquet ne soit terminé d'installer.Exemple:
npm install gitlab:mygitlabuser/myprojectnpm install gitlab:myusr/myproj#semver:^5.0Vous pouvez combiner plusieurs arguments, et même plusieurs types d'arguments.Par exemple:
npm install sax@"><0.2.0" bench supervisorL'argument
--tag
s'appliquera à toutes les cibles d'installation spécifiées. Si atag avec le nom donné existe, la version étiquetée est préférée aux nouvelles versions.L'argument
--dry-run
rapportera de manière habituelle ce que l'installation aurait fait sans réellement installer quoi que ce soit.L'argument
--package-lock-only
mettra uniquement à jour lapackage-lock.json
,au lieu de vérifiernode_modules
et de télécharger les dépendances.L'argument
-f
ou--force
forcera npm à aller chercher des ressources distantes même si une copie locale existe sur le disque.npm install sax --forceL'argument
--no-fund
masquera le message affiché à la fin de chaqueinstallation qui reconnaît le nombre de dépendances à la recherche de financement.Voirnpm-fund(1)
L'argument
-g
ou--global
fera en sorte que npm installe le paquet globalement plutôt que localement. Voir dossiers.L'argument
--global-style
fera en sorte que npm installe le paquet dansvotre dossier localnode_modules
avec la même disposition qu'il utilise avec le dossierglobalnode_modules
. Seules vos dépendances directes apparaîtront dansnode_modules
et tout ce dont elles dépendent sera aplati dans leurs dossiersnode_modules
. Cela éliminera évidemment certains dédoublements.L'argument
--ignore-scripts
fera en sorte que npm n'exécute pas les anyscripts définis dans le package.json. Voirscripts
.L'argument
--legacy-bundling
fera en sorte que npm installe le paquet de telle sorte que les versions de npm antérieures à 1.4, comme celle incluse avec node 0.8, puissent installer le paquet. Cela élimine tout dédoublement automatique.L'argument
--link
fera en sorte que npm lie les installations globales dans l'espace local dans certains cas.L'argument
--no-bin-links
empêchera npm de créer des liens symboliques pour toutes les binaires que le paquet pourrait contenir.L'argument
--no-optional
empêchera les dépendances optionnelles d'être installées.L'argument
--no-shrinkwrap
, qui ignorera un verrou de package disponible ou un fichier shrinkwrap et utilisera le package.json à la place.L'argument
--no-package-lock
empêchera npm de créer un fichierpackage-lock.json
. Lors de l'exécution avec la désactivation de package-lock, npm n'élaguera pas automatiquement vos modules node lors de l'installation.L'argument
--nodedir=/path/to/node/source
permettra à npm de trouver le code source de thenode afin que npm puisse compiler les modules natifs.L'argument
--only={prod|dev}
entraînera l'installation de seulementdevDependencies
ou de seulement non-devDependencies
indépendamment duNODE_ENV
.L'argument
--no-audit
peut être utilisé pour désactiver l'envoi de rapports d'audit aux registres configurés. Voirnpm-audit
pour des détails sur ce qui est envoyé.Voir
config
. Beaucoup des paramètres de configuration ont un certain effet sur l'installation, puisque c'est la plupart de ce que fait npm.Algorithme
Pour installer un paquet, npm utilise l'algorithme suivant :
load the existing node_modules tree from diskclone the treefetch the package.json et les métadonnées assorties et l'ajouter au cloneparcourir le clone et ajouter toutes les dépendances manquantesles dépendances seront ajoutées aussi près du sommet que possible. sans casser d'autres modulescomparer l'arbre original avec l'arbre cloné et faire une liste desactions à entreprendre pour convertir l'un en l'autreexécuter toutes les actions, les premièressortes d'actions les plus profondes sont installer, mettre à jour, supprimer et déplacerPour cette
package{dep}
structure :A{B,C}, B{C}, C{D}
, cet algorithme produit :A+--. B+-- C+-- DC'est-à-dire , la dépendance de B vers C est satisfaite par le fait que Aa déjà provoqué l'installation de C à un niveau supérieur. D est toujours installé au niveau supérieur car rien n'entre en conflit avec lui.
Pour
A{B,C}, B{C,D@1}, C{D@2}
, cet algorithme produit :A+-- B+--. C`-- D@2+-- D@1Parce que le D@1 de B sera installé au niveau supérieur, C doit maintenant installer D@2privément pour lui-même. Cet algorithme est déterministe, mais des arbres différents peut-être produits si deux dépendances sont demandées pour une installation dans un ordre différent.
Voir folders pour une description plus détaillée des structures de dossiers spécifiques que npm crée.
Limites de l'algorithme d'installation de npm
npm refusera d'installer tout paquet ayant un nom identique au paquetcurrent. Ceci peut être surchargé avec le drapeau
--force
, mais dans la plupart des cas, on peut simplement y remédier en changeant le nom du paquet local.Il existe quelques cas limites très rares et pathologiques où un cycle peutcause npm d'essayer d'installer un arbre interminable de paquets. Voici le cas le plus simple :
A -> B -> A' -> B' -> A -> B -> A' -> B' -> A -> ...où
A
est une certaine version d'un paquet, etA'
est une version différente du même paquet. Parce queB
dépend d'une version deA
différente de celle qui est déjà dans l'arbre, il doit installer une copie séparée. Il en va de même pourA'
, qui doit installerB'
. CommeB'
dépend de la version originale deA
, qui a été surchargée, le cycle tombe dans une régression infinie.Pour éviter cette situation, npm refuse carrément d'installer tout
name@version
qui est déjà présent n'importe où dans l'arbre des ancêtres du packagefolder. Une solution plus correcte, mais plus complexe, consisterait à établir un lien symbolique entre la version existante et le nouvel emplacement. Si cela affecte un jour un cas d'utilisation réel, il sera étudié.Voir aussi
- npm folders
- npm update
- npm audit
- npm fund
- npm link
.
- npm rebuild
- npm scripts
- npm build
- npm config
- npmrc
- npm registry
- npm dist-.tag
- npm uninstall
- npm shrinkwrap
- package.json