Come impostare la posizione personalizzata per l'installazione locale del pacchetto npm?


177

È possibile specificare una destinazione del pacchetto personalizzata per npm install, tramite un flag di comando o una variabile di ambiente?

Per impostazione predefinita, le installazioni locali di npm finiscono node_modulesall'interno della directory corrente, ma ad esempio voglio che si installi in node_modulesuna directory diversa vendor/node_modules. Come posso farlo accadere?


cosa stai cercando di realizzare? questo è stato discusso qui: stackoverflow.com/questions/13668097/...
Pascal Belloncle

10
@PascalBelloncle: Invece di installare i pacchetti nelle sottodirectory di ./node_modules, voglio che npm li installi nelle sottodirectory di ./vendor/node_modules. (O per
dirlo

1
Ho capito che è quello che vuoi fare, che non credo sia possibile. Inoltre richiede non funzionerebbe neanche. Quindi stavo chiedendo perché tu volessi farlo. Forse esiste una soluzione alternativa per fare quello che vuoi.
Pascal Belloncle,

1
Sto installando un pacchetto esclusivamente per il suo binario (cioè sarà usato solo sulla riga di comando e mai required) ma non voglio installarlo a livello globale.
pje

Vedo. Vedi il mio suggerimento qui sotto allora.
Pascal Belloncle

Risposte:


180

TL; DR

Puoi farlo usando la --prefixbandiera e la --globalbandiera *.

pje@friendbear:~/foo $ npm install bower -g --prefix ./vendor/node_modules
bower@0.7.0 /Users/pje/foo/vendor/node_modules/bower

* Anche se si tratta di un'installazione "globale", i bin installati non saranno accessibili dalla riga di comando se non sono ~/foo/vendor/node_modulespresenti PATH.

TL; R

Ogni attributo configurabile di npmpuò essere impostato in uno di sei posti diversi. In ordine di priorità:

  • Flag della riga di comando: --prefix ./vendor/node_modules
  • Variabili ambientali: NPM_CONFIG_PREFIX=./vendor/node_modules
  • File di configurazione utente: $HOME/.npmrco userconfigparam
  • File di configurazione globale: $PREFIX/etc/npmrco userconfigparam
  • File di configurazione incorporato: path/to/npm/itself/npmrc
  • Configurazione predefinita: node_modules / npmconf / config-defs.js

Per impostazione predefinita, vanno inseriti i pacchetti installati localmente ./node_modules. quelli globali vanno nella prefixvariabile config ( /usr/localdi default).

Puoi correre npm config listper vedere la tua configurazione attuale e npm config editper cambiarla.

PS

In generale, npmla documentazione è davvero utile. La sezione cartelle è una buona panoramica strutturale di npm e la sezione config risponde a questa domanda.


2
Durante il test, in realtà se seguo il comando sopra, verrà installato ./vendor/node_modules/lib/bowernell'usonpm#3.8.0
e-cloud

2
Nel fare questo, ricevo un erroreNo version provided in package.json
FooBar,

Tu scrivi bins won't be accessible through the command line. Ovviamente il programma può essere invocato usando il percorso completo npm install eslint@3.4.0 -g --prefix c:\my_npm` calling c: \ my_npm \ eslint --fix my.js`
Bernhard Döbler

13
È possibile ottenere qualcosa di simile con un file package.json? cioè se corro npm installnella directory A con il file package.json, i pacchetti verranno installati nella directory B. Sembra che questa soluzione sia per i singoli pacchetti installati.
Ryan-Neal Mes,

1
Esiste un modo per installare tutte le dipendenze usando questo metodo? npm installinstalla dipendenze localmente. npm install X -g -prefix "..."installa il modulo X sul prefisso, npm install -g -prefix "..."installa il pacchetto corrente sul prefisso.
AnnanFay

28

Se lo desideri in config, puoi impostare npm config in questo modo:

npm config set prefix "$(pwd)/vendor/node_modules"

o

npm config set prefix "$HOME/vendor/node_modules"

Controlla la tua configurazione con

npm config ls -l

O come dice @pje e usa la --prefixbandiera


4
Credo che questo stabilisca il prefisso globale? Così facendo npm installverrà comunque installato localmente ./node_modulesma npm install -gverrà installato su "$(pwd)/vendor/node_modules". Posso immaginare le impostazioni di questo poi dimenticarmene, tornando più tardi chiedendomi perché i miei pacchetti globali si stanno comportando in modo strano.
AnnanFay

13

Per OSX, puoi andare al tuo utente $HOME(probabilmente / Users / tuonome /) e, se non esiste già, creare un .npmrcfile (un file che npm utilizza per la configurazione dell'utente) e creare una directory per i tuoi pacchetti npm per essere installato in (ad es., / Users / tuonome / npm). In quel file .npmrc, imposta "prefisso" sulla tua nuova directory npm, che sarà dove verranno installati i pacchetti npm installati "a livello globale"; questi pacchetti "globali" saranno ovviamente disponibili solo per il tuo account utente.

In .npmrc:

prefix=${HOME}/npm

Quindi eseguire questo comando dalla riga di comando:

npm config ls -l

Dovrebbe fornire output sia sulla propria configurazione locale che su quella globale npm e si dovrebbe vedere riflessa la configurazione del prefisso locale, probabilmente vicino alla cima del lungo elenco di output.

Per motivi di sicurezza, raccomando questo approccio alla configurazione del comportamento npm del tuo account utente rispetto al chown delle /usr/localcartelle, che ho visto consigliato altrove.


9

Su Windows 7, ad esempio, è possibile utilizzare la seguente serie di comandi / operazioni.

Crea una variabile d'ambiente personale, sono obbligatorie doppie barre rovesciate:

  • Nome della variabile: %NPM_HOME%
  • Valore variabile: C:\\SomeFolder\\SubFolder\\

Ora, imposta i valori di configurazione sulle nuove cartelle (nomi di file esemplificativi):

  • Imposta la cartella npm

npm config set prefix "%NPM_HOME%\\npm"

  • Imposta la cartella npm-cache

npm config set cache "%NPM_HOME%\\npm-cache"

  • Imposta la cartella temporanea npm

npm config set tmp "%NPM_HOME%\\temp"

Facoltativamente, è possibile eliminare il contenuto delle cartelle originali prima di modificare la configurazione.

  • Elimina la cache npm npm cache clear

  • Elencare i moduli npm npm -g ls

  • Elimina i moduli npm npm -g rm name_of_package1 name_of_package2


1
Grazie, seguo i passaggi. Ma crea una directory chiamata c: /% NPM_HOME% / npm, ecc. Invece di c: / npm_home / npm
Jay

6

Dopo averlo cercato io stesso, volevo che diversi progetti con dipendenze condivise fossero DRYer, ho scoperto:

  • L'installazione locale è la modalità Nodo per tutto ciò che si desidera utilizzare tramite require()
  • L'installazione a livello globale è per i binari che desideri nel tuo percorso, ma non è destinata a nulla tramite require()
  • L'uso di un prefisso significa che è necessario aggiungere percorsi bine manpercorsi appropriati$PATH
  • npm link( informazioni ) ti consente di utilizzare un'installazione locale come fonte per i globali

→ attenersi al modo Nodo e installare localmente

ref:

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.