npm-install
Sinossi
npm install (senza args, in package dir)npm install <name>npm install <name><tag>npm install <name><versione>npm install <name>< gamma di versioni>npm install <alias>@npm:< nome>npm install <git-host><git-user><repo-nome>npm install < url repogit>npm install <tarball file>npm install <tarball url>npm install <folder>alias: npm i, npm addopzioni comuni:
Descrizione
Questo comando installa un pacchetto e tutti i pacchetti da cui dipende. Se il pacchetto ha un file package-lock o shrinkwrap, l’installazione delle dipendenze sarà guidata da quello, con un npm-shrinkwrap.json che ha la precedenza se entrambi i file esistono. Vedere package-lock.json e npm shrinkwrap.
Un package è:
- a) una cartella contenente un programma descritto da un file
package.json - b) un tarball gzippato contenente (a)
- c) un url che risolve a (b)
- d) un
<name>@<version>che è pubblicato sul registro (vediregistry) con (c) - e) un
<name>@<tag>(vederenpm dist-tag) che punta a (d) - f) un
<name>che ha un tag “latest” che soddisfa (e) - g) un
<git remote url>che si risolve in (a)
Anche se non pubblichi mai il tuo pacchetto, si possono ancora ottenere molti benefici dall’uso di npm se si vuole solo scrivere un programma su nodo (a), e forse se si vuole anche essere in grado di installarlo facilmente altrove dopo averlo impacchettato in un tarball (b).
-
npm install(nella directory del pacchetto, senza argomenti):Installa le dipendenze nella cartella locale node_modules.
In modalità globale (cioè con
-go--globalaggiunto al comando), installa il contesto del pacchetto corrente (cioè la directory di lavoro corrente) come un pacchetto globale.Per default,
npm installinstallerà tutti i moduli elencati come dipendenze inpackage.json.Con il flag
--production(o quando la variabile d’ambienteNODE_ENVè impostata suproduction), npm non installa i moduli elencati indevDependencies. Per installare tutti i moduli elencati sia independenciesche indevDependenciesquando la variabile d’ambienteNODE_ENVè impostata suproduction, puoi usare--production=false.NOTA: Il flag
--productionnon ha un significato particolare quando si aggiungono dipendenze a un progetto. -
npm install <folder>:Installa il pacchetto nella directory come symlink nel progetto corrente. Se
<folder>si trova all’interno della radice del progetto, le sue dipendenze possono essere portate al livello superiorenode_modulescome farebbero per altri tipi di dipendenze. -
npm install <tarball file>:Installare un pacchetto che si trova sul filesystem. Nota: se vuoi solo collegare una directory dev alla tua root di npm, puoi farlo più facilmente usando
npm link.Requisiti del tarball:
-
Il nome del file deve usare
.tar.tar.gz, o.tgzcome estensione. -
Il contenuto del pacchetto dovrebbe risiedere in una sottocartella all’interno del tarball (di solito si chiama
package/). npm rimuove un livello di directory durante l’installazione del pacchetto (viene eseguito un equivalente ditar x --strip-components=1). -
Il pacchetto deve contenere un file
package.jsoncon proprietànameeversion.Esempio:
npm install ./package.tgz
-
-
npm install <tarball url>:Recupera l’url del tarball e poi installalo. Per distinguere tra questa e le altre opzioni, l’argomento deve iniziare con “http://” o “https://”
Esempio:
npm install https://github.com/indexzero/forever/tarball/v0.5.6 -
npm install <name>:Fate un’installazione
<name>@<tag>, dove<tag>è la configurazione del “tag”. (Seeconfig. Il valore predefinito della configurazione èlatest.)Nella maggior parte dei casi, questo installerà la versione dei moduli etichettati come
latestnel registro di npm.Esempio:
npm install sax -
npm install <alias>@npm:<name>:Installa un pacchetto sotto un alias personalizzato. Permette versioni multiple di un pacchetto con lo stesso nome fianco a fianco, nomi di importazione più convenienti per pacchetti altrimenti lunghi e l’uso di sostituzioni git forks o pacchetti npm forked come sostituzioni. L’aliasing funziona solo sul tuo progetto e non rinomina i pacchetti nelle dipendenze transitive; gli alias dovrebbero seguire le convenzioni di denominazione indicate in
validate-npm-package-name.Esempi:
npm install my-react@npm:reactnpm install jquery2@npm:jquery@2npm install jquery3@npm:jquery@3npm install npa@npm:npm-package-arg
`npm install` salva qualsiasi pacchetto specificato in `dependencies` per impostazione predefinita.Inoltre, è possibile controllare dove e come vengono salvati con alcuniflags aggiuntivi:* `-P, --save-prod`: Il pacchetto apparirà nelle tue `dipendenze`. Questo è ildefault a meno che non siano presenti `-D` o `-O`.* `-D, --save-dev`: Il pacchetto apparirà nelle tue `devDependencies`.* `-O, --save-optional`: Il pacchetto apparirà nelle tue `optionalDependencies`.* `--no-save`: Impedisce il salvataggio nelle `dipendenze`.Quando si usa una delle opzioni precedenti per salvare le dipendenze nel propriopackage.json, ci sono due flag aggiuntivi e opzionali:* `-E, --save-exact`: Le dipendenze salvate saranno configurate con unaversione esatta piuttosto che usare l'operatore predefinito di semver di npm.* `-B, --save-bundle`: Le dipendenze salvate saranno anche aggiunte alla tua lista `bundleDependencies`.Inoltre, se hai un `npm-shrinkwrap.json` o `package-lock.json` allora anche questoverrà aggiornato.<scope>` è opzionale. Il pacchetto sarà scaricato dal registroassociato all'ambito specificato. Se nessun registro è associato al'ambito dato, viene assunto il registro predefinito. Vedere (/cli/v6/using-npm/scope).Nota: se non si include il simbolo @ sul nome dello scope, npm lointerpreterà invece come un repository GitHub, vedere sotto. I nomi degli scopedevono anche essere seguiti da una barra.Esempi:``bashnpm install saxnpm install githubname/reponamenpm install @myorg/privatepackagenpm install node-toccare -salva-devnpm install dtrace-provider --save-optionalnpm install readable-stream --save-exactnpm install ansi-regex --save-bundle```**Nota**: Se c'è un file o una cartella chiamata `<nome>` nella directory correntelavoro, allora cercherà di installare quella, e cercherà solo direcuperare il pacchetto per nome se non è valido.
-
npm install <name>@<tag>:Installa la versione del pacchetto a cui fa riferimento il tag specificato.Se il tag non esiste nei dati di registro per quel pacchetto, allora questo fallirà.
Esempio:
npm install sax@latestnpm install @myorg/mypackage@latest -
npm install <name>@<version>:Installa la versione specificata del pacchetto. Questo fallirà se la versione non è stata pubblicata nel registro.
Esempio:
npm install [email protected]npm install @myorg/[email protected]
npm install <name>@<version range>:
Installa una versione del pacchetto corrispondente all’intervallo di versioni specificato. Questo seguirà le stesse regole per risolvere le dipendenze descritte in package.json.
Si noti che la maggior parte degli intervalli di versione devono essere messi tra virgolette in modo che la shell li tratti come un singolo argomento.
Esempio:
npm install <git remote url>:
Installa il pacchetto dal provider git ospitato, clonandolo con git.Per un url git remote completo, verrà tentato solo quell’URL.
<protocollo><hostname><path>
<protocol> è uno dei gitgit+sshgit+httpgit+https, ogit+file.
Se viene fornito #<commit-ish>, sarà usato per clonare esattamente quel commit. Se il commit-ish ha il formato #semver:<semver><semver> può essere qualsiasi intervallo di seme valido o versione esatta, e npm cercherà qualsiasi tag o refs che corrisponda a quell’intervallo nel repository remoto, proprio come farebbe per una dipendenza dal registro. Se né #<commit-ish> né #semver:<semver> sono specificati, allora viene usato il ramo predefinito del repository.
Se il repository fa uso di sottomoduli, anche questi saranno clonati.
Se il pacchetto da installare contiene uno script prepare, i suoidependencies e devDependencies saranno installati, e il preparescript sarà eseguito, prima che il pacchetto sia impacchettato e installato.
Le seguenti variabili d’ambiente git sono riconosciute da npm e saranno aggiunte all’ambiente quando si esegue git:
-
GIT_ASKPASS -
GIT_EXEC_PATH -
GIT_PROXY_COMMAND -
GIT_SSH -
GIT_SSH_COMMAND -
GIT_SSL_CAINFO -
GIT_SSL_NO_VERIFYVedi la pagina man di git per dettagli.
Esempi:
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>:
Installare il pacchetto a https://github.com/githubname/githubrepo tentando di clonarlo usando git.
Se viene fornito #<commit-ish>, sarà usato per clonare esattamente quel commit. Se il commit-ish ha il formato #semver:<semver><semver> può essere qualsiasi intervallo di seme valido o versione esatta, e npm cercherà qualsiasi tag o refs che corrisponda a quell’intervallo nel repository remoto, proprio come farebbe per una dipendenza dal registro. Se né #<commit-ish> né #semver:<semver> sono specificati, allora viene usato master.
Come per le normali dipendenze git, dependencies e devDependencies saranno installati se il pacchetto ha uno script prepare, prima che il pacchetto sia installato.
Esempi:
npm install mygithubuser/myprojectnpm install github:mygithubuser/myproject
npm install gist:<gistID>:
Installare il pacchetto a https://gist.github.com/gistID cercando di clonarlo usando git. Il nome utente GitHub associato al gist è facoltativo e non sarà salvato in package.json.
Come per le normali dipendenze git, dependencies e devDependencies saranno installati se il pacchetto ha uno script prepare, prima che il pacchetto venga installato.
Esempio:
npm install gist:
npm install bitbucket:<bitbucketname>/<bitbucketrepo>:
Installare il pacchetto a https://bitbucket.org/bitbucketname/bitbucketrepo tentando di clonarlo usando git.
Se viene fornito #<commit-ish>, sarà usato per clonare esattamente quel commit. Se il commit-ish ha il formato #semver:<semver><semver> può essere qualsiasi intervallo di seme valido o versione esatta, e npm cercherà qualsiasi tag o refs che corrisponda a quell’intervallo nel repository remoto, proprio come farebbe per una dipendenza dal registro. Se né #<commit-ish> né #semver:<semver> sono specificati, allora viene usato master.
Come per le normali dipendenze git, dependencies e devDependencies saranno installati se il pacchetto ha uno script prepare, prima che il pacchetto sia installato.
Esempio:
npm install bitbucket:mybitbucketuser/myproject
npm install gitlab:<gitlabname>/<gitlabrepo>:
Installare il pacchetto a https://gitlab.com/gitlabname/gitlabrepo tentando di clonarlo usando git.
Se viene fornito #<commit-ish>, sarà usato per clonare esattamente quel commit. Se il commit-ish ha il formato #semver:<semver><semver> può essere qualsiasi intervallo di seme valido o versione esatta, e npm cercherà qualsiasi tag o refs che corrisponda a quell’intervallo nel repository remoto, proprio come farebbe per una dipendenza dal registro. Se né #<commit-ish> né #semver:<semver> sono specificati, allora viene usato master.
Come per le normali dipendenze git, dependencies e devDependencies saranno installati se il pacchetto ha uno script prepare, prima che il pacchetto venga installato.
Esempio:
npm install gitlab:mygitlabuser/myprojectnpm install gitlab:myusr/myproj#semver:^5.0
È possibile combinare più argomenti, e anche più tipi di argomenti.Per esempio:
npm install sax@"><0.2.0" supervisore di banco
L’argomento --tag si applica a tutti gli obiettivi di installazione specificati. Se esiste un atag con il nome dato, la versione etichettata è preferita alle newerversions.
L’argomento --dry-run riporterà nel solito modo ciò che l’installazione avrebbe fatto senza installare effettivamente nulla.
L’argomento --package-lock-only aggiornerà solo il package-lock.json, invece di controllare node_modules e scaricare le dipendenze.
L’argomento -f o --force forzerà npm a recuperare risorse remote anche se esiste una copia locale su disco.
npm install sax --force
L’argomento --no-fund nasconderà il messaggio visualizzato alla fine di ogni installazione che riconosce il numero di dipendenze in cerca di finanziamento.Vedere npm-fund(1)
L’argomento -g o --global farà sì che npm installi il pacchetto a livello globale invece che locale. Vedi cartelle.
L’argomento --global-style farà sì che npm installi il pacchetto nella tua cartella locale node_modules con lo stesso layout che usa con la cartella node_modules globale. Solo le vostre dipendenze dirette appariranno innode_modules e tutto ciò da cui dipendono sarà appiattito nelle loronode_modules cartelle. Questo ovviamente eliminerà un po’ di deduping.
L’argomento --ignore-scripts farà sì che npm non esegua anyscripts definiti nel package.json. Vedi scripts.
L’argomento --legacy-bundling farà sì che npm installi il pacchetto in modo che le versioni di npm precedenti alla 1.4, come quella inclusa in node 0.8, possano installarlo. Questo elimina ogni deduplicazione automatica.
L’argomento --link farà sì che npm colleghi le installazioni globali nello spazio locale in alcuni casi.
L’argomento --no-bin-links impedirà a npm di creare collegamenti simbolici per qualsiasi binario che il pacchetto potrebbe contenere.
L’argomento --no-optional impedirà l’installazione delle dipendenze opzionali.
L’argomento --no-shrinkwrap, che ignorerà un blocco di pacchetto disponibile o un file shrinkwrap e userà il file package.json.
L’argomento --no-package-lock impedirà a npm di creare unpackage-lock.json file. Quando si esegue con il package-lock disabilitato npm non pota automaticamente i moduli di node durante l’installazione.
L’argomento --nodedir=/path/to/node/source permetterà a npm di trovare il codice sorgente di node in modo che npm possa compilare i moduli nativi.
L’argomento --only={prod|dev} farà sì che solodevDependencies o solo non-devDependencies venga installato indipendentemente dall’argomento NODE_ENV.
L’argomento --no-audit può essere usato per disabilitare l’invio di rapporti di audit ai registri configurati. Vedere npm-audit per i dettagli su cosa viene inviato.
Vedi config. Molti dei parametri di configurazione hanno qualche effetto sull’installazione, dato che è la maggior parte di ciò che fa npm.
Algoritmo
Per installare un pacchetto, npm usa il seguente algoritmo:
carica l'albero di node_modules esistente dal discoclona l'alberorecupera il pacchetto.json e metadati assortiti e aggiungerlo al clonepercorrere il clone e aggiungere eventuali dipendenze mancantile dipendenze saranno aggiunte il più vicino possibile alla cimasenza rompere nessun altro moduloconfrontare l'albero originale con l'albero clonato e fare una lista diazioni da prendere per convertire uno nell'altroeseguire tutte le azioni, i primi più profonditipi di azioni sono installare, aggiornare, rimuovere e spostare
Per questa package{dep} struttura: A{B,C}, B{C}, C{D}, questo algoritmo produce:
A+-- B+-- C+-- D
Questo è, la dipendenza da B a C è soddisfatta dal fatto che A ha già causato l’installazione di C ad un livello superiore. D è ancora installato al livello più alto perché nulla è in conflitto con esso.
Per A{B,C}, B{C,D@1}, C{D@2}, questo algoritmo produce:
A+-- B+-- C`-- D@2+-- D@1
Perché il D@1 di B sarà installato nel livello superiore, C ora deve installare D@2 privatamente per se stesso. Questo algoritmo è deterministico, ma possono essere prodotti alberi diversi se due dipendenze sono richieste per l’installazione in un ordine diverso.
Vedi folders per una descrizione più dettagliata delle specifiche strutture di cartelle che npm crea.
Limitazioni dell’algoritmo di installazione di npm
npm rifiuta di installare qualsiasi pacchetto con un nome identico al pacchetto corrente. Questo può essere annullato con il flag --force, ma nella maggior parte dei casi può essere semplicemente affrontato cambiando il nome del pacchetto locale.
Ci sono alcuni casi limite molto rari e patologici in cui un ciclo può far sì che npm cerchi di installare un albero infinito di pacchetti. Ecco il caso più semplice:
A -> B -> A' -> B' -> A -> B -> A' -> B' -> A -> ...
dove A è una qualche versione di un pacchetto, e A' è una versione diversa dello stesso pacchetto. Poiché B dipende da una versione diversa di A da quella che è già nell’albero, deve installare una copia separata. Lo stesso vale per A', che deve installare B'. Poiché B' dipende dalla versione originale di A, che è stata sovrascritta, il ciclo cade in un regresso infinito.
Per evitare questa situazione, npm rifiuta categoricamente di installare qualsiasiname@version che sia già presente da qualche parte nell’albero degli antenati di packagefolder. Una soluzione più corretta, ma più complessa, sarebbe quella di fare un link simbolico alla versione esistente nella nuova posizione. Se questo dovesse mai interessare un caso d’uso reale, sarà oggetto di indagine.
Vedi anche
- 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