Come installare npm in una directory specificata?


Risposte:


325

Puoi usare l' --prefixopzione:

mkdir -p ./install/here/node_modules
npm install --prefix ./install/here <package>

I pacchetti verranno quindi installati in ./install/here/node_modules. Il mkdirè necessario dal momento che NPM potrebbe altrimenti scegliere uno già esistente node_modulesdirectory più in alto nella gerarchia. (Vedi la documentazione di npm sulle cartelle .)


65
Sembra che tu debba avere il file package.json in questa directory alternativa se usi l'opzione --prefix. C'è un modo per avere package.json nella directory corrente e installarlo nella directory alternativa?

2
@fractal Vedi la mia risposta per questo
yunzen

10
@coundy C'è un modo per specificare il percorso per npm install(senza il nome del pacchetto)? L'ho preso direttamente, ma poi npm cerca package.jsonnel {prefix}. Quello che mi prefiggo è anche quello di essere in grado di far entrare il packages.jsonroot del progetto e allo stesso tempo installare tutti i pacchetti {project root}/{project webroot}.
automatix,

Ho riscontrato un problema di ricorsione. C'è un modo per dirlo a correre una volta? L'ho risolto temporaneamente cambiando directory e poi chiamando npm install, ma --prefixsembra una soluzione migliore, se non causasse una ricorsione.
adi518,

47

Nella documentazione è dichiarato: Utilizzare l'opzione di prefisso insieme con l'opzione globale :

Il prefisso config imposta per impostazione predefinita la posizione in cui è installato il nodo. Sulla maggior parte dei sistemi, questo è / usr / local . Su Windows, questa è la posizione esatta del file binario node.exe. Sui sistemi Unix, è di un livello superiore, poiché il nodo è in genere installato su {prefisso} / bin / node anziché su {prefisso} /node.exe .

Quando viene impostato il flag globale , npm installa le cose in questo prefisso. Quando non è impostato, utilizza la radice del pacchetto corrente o la directory di lavoro corrente se non si trova già in un pacchetto.

(Enfasi da loro)

Quindi nella tua directory principale puoi installare

npm install --prefix <path/to/prefix_folder> -g

e installerà la node_modulescartella nella cartella

<path/to/prefix_folder>/lib/node_modules

2
Non puoi requireinstallare pacchetti a livello globale, vero?
Pavlo,


1
Dovresti aggiungere questo alla risposta.
Pavlo,

6
@Pavlo Non la penso così. Non è la risposta al PO.
yunzen

@Pavlo Se un pacchetto è installato a livello globale, è necessario come sempre. Quindi sì, puoi richiedere un pacchetto installato a livello globale.
Rob Evans,

43

A partire dalla versione npm 3.8.6, è possibile utilizzare

npm install --prefix ./install/here <package>

per installare nella directory specificata. NPM crea automaticamente una node_modulescartella anche quando node_modulesesiste già una directory nella gerarchia superiore. Puoi anche avere un package.jsonnella directory corrente e quindi installarlo nella directory specificata usando l' --prefixopzione:

npm install --prefix ./install/here

A partire da npm 6.0.0, è possibile utilizzare

npm install --prefix ./install/here ./

per installare package.json nella directory corrente nella directory "./install/here". C'è una cosa che ho notato su Mac che crea un collegamento simbolico alla cartella principale all'interno della directory node_modules. Ma funziona ancora.

NOTA: NPM rispetta il percorso specificato tramite l' --prefixopzione. Si risolve secondo la documentazione npm sulle cartelle , solo quando npm installviene utilizzato senza l' --prefixopzione.


1
Questo non sembra il lavoro, ho sempre arrivareCan't install <current directory>: Missing package name
Tibor Blenessy

1
@TiborBlenessy Supponendo che stai parlando della seconda dichiarazione di installazione. Assicurati di avere un file package.json valido nella directory corrente. Se ancora non funziona, fammi sapere la tua versione di npm. Questi passaggi funzionavano con la versione npm specificata. E, se non lo fanno più, mi piacerebbe immergermi in profondità e arrivare alla causa principale e potrei essere in grado di trovare un'alternativa.
Rohit Sharma,

1
@RohitSharma Utilizzando npm 6.0.0 questo metodo non funziona in quanto prevede il package.jsonfile in./install/here
Christian Ivicevic

@ChristianIvicevic È possibile utilizzare npm install --prefix ./install/here ./ per installare package.json nella directory corrente nella directory "./install/here". C'è una cosa che ho notato su Mac che crea un collegamento simbolico alla cartella principale all'interno della directory node_modules. Ma funziona ancora con npm 6.0.0
Rohit Sharma,

1
@Tanoro Il terzo comando funzionerà con npm 6.0.0 con la creazione del collegamento simbolico come indicato nella risposta. Non ho mai provato i primi 2 comandi con npm v3.5.2, motivo per cui ho citato la versione specifica di npm con cui avevo provato. Sentiti libero di aggiornare la risposta con comandi funzionanti anche per altre versioni.
Rohit Sharma,

0

Sto usando una build PowerShell e non riesco a far funzionare npm senza cambiare la directory corrente.

Finito usando il comando start e semplicemente specificando la directory di lavoro:

start "npm" -ArgumentList "install --warn" -wo $buildFolder
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.