Specificare il percorso per node_modules in package.json

C’è un modo per spostare la directory node_modules in un’applicazione per dire / vendor / node_modules come bower fa con il file bowerrc? Ho pensato che potesse essere specificato in package.json ma non riesco a trovare una soluzione. Il tuo aiuto è molto apprezzato.

sì, puoi semplicemente impostare la variabile env NODE_PATH:

 export NODE_PATH='yourdir'/node_modules 

Secondo il documento:

Se la variabile di ambiente NODE_PATH è impostata su un elenco delimitato da due punti di percorsi assoluti, il nodo cercherà quei percorsi per i moduli se non vengono trovati altrove. (Nota: su Windows, NODE_PATH è delimitato da punto e virgola anziché da due punti).

Inoltre, il nodo cercherà nelle seguenti posizioni:

1: $ HOME / .node_modules

2: $ HOME / .node_libraries

3: $ PREFIX / lib / node

Dove $ HOME è la directory home dell’utente e $ PREFIX è node_prefix configurato dal nodo.

Questi sono per lo più per ragioni storiche. Siete fortemente incoraggiati a collocare le vostre dipendenze localmente nelle cartelle node_modules. Saranno caricati più velocemente e in modo più affidabile.

fonte

In breve: non è ansible, e come sembra non sarà mai supportato (vedi qui https://github.com/npm/npm/issues/775 ).

Ci sono alcuni problemi con l’uso delle variabili CLI o ENV (vedi la risposta corrente selezionata), .npmrc-Config-Files o npm link – cosa hanno tutti in comune: non sono mai solo specifici del progetto, ma sempre una sorta di soluzioni global .

Per me, nessuna di queste soluzioni è davvero pulita perché i contributori al tuo progetto hanno sempre bisogno di creare qualche configurazione speciale o avere qualche conoscenza speciale – non possono semplicemente npm install e funziona.

Quindi: O dovrai mettere il tuo pacchetto. Json nella stessa directory in cui vuoi installare node_modules, o vivere con il fatto che saranno sempre nella directory principale del tuo progetto.

Non sono sicuro se questo è quello che avevi in ​​mente, ma ho finito su questa domanda perché non ero in grado di installare node_modules all’interno della mia dir di progetto poiché era montato su un filesystem che non supportava i collegamenti simbolici (una VM “condivisa” cartella).

Ho trovato la seguente soluzione:

  1. Copiare il file project.json in una cartella temporanea su un altro file system
  2. Esegui npm install
  3. Copia la directory node_modules risultante nella dir del progetto, usando cp -r --dereference per espandere i cp -r --dereference simbolici in copie.

Spero che questo aiuti qualcun altro che finisce su questa domanda quando cerca un modo per spostare node_modules su un altro filesystem.

Altre opzioni

C’è un’altra soluzione alternativa, che ho trovato sul problema github a cui è collegato @Charminbear , ma questo non funziona con grunt perché non supporta NODE_PATH come da https://github.com/browserify/resolve/issues/136 :

diciamo che hai /media/sf_shared e non puoi installare i /media/sf_shared simbolici lì, il che significa che in realtà non puoi installare npm da /media/sf_shared/myproject perché alcuni moduli usano i /media/sf_shared/myproject simbolici.

  • $ mkdir /home/dan/myproject && cd /home/dan/myproject
  • $ ln -s /media/sf_shared/myproject/package.json (puoi link simbolici in questa direzione, non puoi crearne uno dentro / media / sf_shared)
  • $ npm install
  • $ cd /media/sf_shared/myproject
  • $ NODE_PATH=/home/dan/myproject/node_modules node index.js