Come installo le dipendenze package.json nella directory corrente usando npm


202

Ho un'app Web: fooapp . Ho un package.jsonnella radice. Voglio installare tutte le dipendenze in uno specifico node_modules directory. Come faccio a fare questo?

Quello che voglio

Diciamo che ho due widgetdipendenze. Voglio finire con una struttura di directory come questa:

node_modules/
  widgetA
  widgetB
fooapp/
  package.js
  lib
  ..

Quello che ottengo

quando corro npm install fooapp/ ottengo questo:

node_modules/
  fooapp/
    node_modules/
      widgetA
      widgetB
    package.js
    lib/
    ..
fooapp/
  package.js
  lib/
  ..

npm crea una copia della mia directory dell'app nella directory node_modules e installa i pacchetti all'interno di un'altra directory node_modules.

Capisco che questo abbia senso per l'installazione di un pacchetto. Ma non ho la require()mia app web dentro qualcos'altro, la eseguo direttamente. Sto cercando un modo semplice per installare le mie dipendenze in una specifica directory node_modules.

Risposte:


389

In esecuzione:

npm install

dall'interno della directory dell'app (ovvero dove si trova package.json) installerà le dipendenze per l'app, anziché installarlo come modulo, come descritto qui . Questi verranno inseriti in ./node_modules rispetto al tuo file package.json (in realtà è leggermente più complesso di così, quindi controlla i documenti npm qui ).

Sei libero di spostare la directory node_modules nella directory principale della tua app, se lo desideri, perché il meccanismo 'Richiedi' del nodo lo capisce. Tuttavia, se desideri aggiornare le dipendenze della tua app con install / update, npm non vedrà i 'node_modules' trasferiti e creerà invece una nuova directory, sempre relativa a package.json.

Per evitare ciò, basta creare un collegamento simbolico ai nodi_moduli trasferiti dalla directory dell'app:

ln -s ../node_modules node_modules

Fantastico! Lo proverò e segnerò questa risposta come accettata se funziona.
Daniel Beardsley,

9
Nonostante che si tratta di una soluzione di lavoro, ho scoperto che npm linkè più conveniente in tali situazioni in cui è necessario afferrare i moduli da un'altra directory (vedi stackoverflow.com/a/14387210/820520 )
melekes

14

Nel mio caso, devo farlo

sudo npm install  

il mio progetto è all'interno di / var / www, quindi devo anche impostare le autorizzazioni appropriate.


15
sudo potrebbe non essere necessario per l'installazione di npm.
Allen Koo,

2
A seconda dell'utente che deve eseguire il file js e le dipendenze installate, è possibile eseguire sudo -u [username] npm install. Meglio solo npm installe chownla directory node_modules ricorsivamente dopo il fatto.
TheLonelyGhost

5
non eseguire mai npm con sudo a meno che non lo si stia utilizzando -ge anche in questo caso esistono modi migliori per gestirlo.
dal

1
Grazie per la tua risposta, ma perché? Puoi spiegare? Voglio dire, cosa succede se ho un progetto in cui voglio o ho bisogno di mantenere una cartella con permessi di root e installare dipendenze senza -g lì? forse c'è una buona ragione, ma ho fatto sudo npm install (senza -g) alcune volte e non ho mai avuto problemi. Saluti!
aede il

1
@RredCat Sono d'accordo sul modo giusto di fare questo tipo di cose, ma dopo un po 'ho notato che questa discussione sta migrando verso Ubuntu, sembra che ci sia un problema nel modo in cui gestisce alcune autorizzazioni e cartelle, che sta costringendo gli utenti a usare sudo npm. Ancora una volta, solo in Ubuntu.
aesede il

0

Esegui e basta

sudo npm i --save

È tutto

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.