2015-04-20 4 views
11

Se scrivoGlobalmente set node_modules posizione per il progetto

var moment = require('moment'); 

nel mio progetto, i rifiuti Nodo un sacco di tempo a cercare in luoghi che in realtà non contengono il file, in quanto questo dtruss spettacoli di uscita.

 PID/THRD RELATIVE SYSCALL(args)     = return 
7079/0x7cf313: 1244530 stat64("/Users/burke/code/api/api/models/node_modules/moment\0", 0x7FFF5FBFE5D8, 0x9)   = -1 Err#2 
7079/0x7cf313: 1244575 stat64("/Users/burke/code/api/api/models/node_modules/moment.js\0", 0x7FFF5FBFE578, 0x9)    = -1 Err#2 
7079/0x7cf313: 1244595 stat64("/Users/burke/code/api/api/models/node_modules/moment.json\0", 0x7FFF5FBFE578, 0x9)    = -1 Err#2 
7079/0x7cf313: 1244612 stat64("/Users/burke/code/api/api/models/node_modules/moment.node\0", 0x7FFF5FBFE578, 0x9)    = -1 Err#2 
7079/0x7cf313: 1244628 stat64("/Users/burke/code/api/api/models/node_modules/moment.coffee\0", 0x7FFF5FBFE578, 0x9)   = -1 Err#2 
7079/0x7cf313: 1244663 open("/Users/burke/code/api/api/models/node_modules/moment/package.json\0", 0x0, 0x1B6)    = -1 Err#2 
7079/0x7cf313: 1244694 stat64("/Users/burke/code/api/api/models/node_modules/moment/index.js\0", 0x7FFF5FBFE578, 0x1B6)    = -1 Err#2 
7079/0x7cf313: 1244713 stat64("/Users/burke/code/api/api/models/node_modules/moment/index.json\0", 0x7FFF5FBFE578, 0x1B6)    = -1 Err#2 
7079/0x7cf313: 1244729 stat64("/Users/burke/code/api/api/models/node_modules/moment/index.node\0", 0x7FFF5FBFE578, 0x1B6)    = -1 Err#2 
7079/0x7cf313: 1244745 stat64("/Users/burke/code/api/api/models/node_modules/moment/index.coffee\0", 0x7FFF5FBFE578, 0x1B6)   = -1 Err#2 
7079/0x7cf313: 1244767 stat64("/Users/burke/code/api/api/node_modules/moment\0", 0x7FFF5FBFE5D8, 0x1B6)    = -1 Err#2 
7079/0x7cf313: 1244788 stat64("/Users/burke/code/api/api/node_modules/moment.js\0", 0x7FFF5FBFE578, 0x1B6)   = -1 Err#2 
7079/0x7cf313: 1244805 stat64("/Users/burke/code/api/api/node_modules/moment.json\0", 0x7FFF5FBFE578, 0x1B6)   = -1 Err#2 
7079/0x7cf313: 1244821 stat64("/Users/burke/code/api/api/node_modules/moment.node\0", 0x7FFF5FBFE578, 0x1B6)   = -1 Err#2 
7079/0x7cf313: 1244837 stat64("/Users/burke/code/api/api/node_modules/moment.coffee\0", 0x7FFF5FBFE578, 0x1B6)    = -1 Err#2 
7079/0x7cf313: 1244862 open("/Users/burke/code/api/api/node_modules/moment/package.json\0", 0x0, 0x1B6)    = -1 Err#2 
7079/0x7cf313: 1244887 stat64("/Users/burke/code/api/api/node_modules/moment/index.js\0", 0x7FFF5FBFE578, 0x1B6)    = -1 Err#2 
7079/0x7cf313: 1244904 stat64("/Users/burke/code/api/api/node_modules/moment/index.json\0", 0x7FFF5FBFE578, 0x1B6)   = -1 Err#2 
7079/0x7cf313: 1244920 stat64("/Users/burke/code/api/api/node_modules/moment/index.node\0", 0x7FFF5FBFE578, 0x1B6)   = -1 Err#2 
7079/0x7cf313: 1244936 stat64("/Users/burke/code/api/api/node_modules/moment/index.coffee\0", 0x7FFF5FBFE578, 0x1B6)   = -1 Err#2 
7079/0x7cf313: 1244964 stat64("/Users/burke/code/api/node_modules/moment\0", 0x7FFF5FBFE5D8, 0x1B6)   = 0 0 
7079/0x7cf313: 1244990 stat64("/Users/burke/code/api/node_modules/moment.js\0", 0x7FFF5FBFE578, 0x1B6)    = -1 Err#2 
7079/0x7cf313: 1245015 stat64("/Users/burke/code/api/node_modules/moment.json\0", 0x7FFF5FBFE578, 0x1B6)    = -1 Err#2 
7079/0x7cf313: 1245038 stat64("/Users/burke/code/api/node_modules/moment.node\0", 0x7FFF5FBFE578, 0x1B6)    = -1 Err#2 
7079/0x7cf313: 1245488 madvise(0x1008AE000, 0x21000, 0x9)    = 0 0 
7079/0x7cf313: 1245503 stat64("/Users/burke/code/api/node_modules/moment.coffee\0", 0x7FFF5FBFE578, 0x9)    = -1 Err#2 
7079/0x7cf313: 1245612 open("/Users/burke/code/api/node_modules/moment/package.json\0", 0x0, 0x1B6)   = 11 0 

C'è un modo per rendere il nodo non sprecare tanto tempo per cercare in posti che non contengono una directory node_modules? Ad esempio, potrei impostare una specie di variabile di ambiente CHECK_HERE_FIRST=$HOME/code/api/node_modules e se il requisito non è relativo a un percorso relativo, quello sarebbe il primo posto sul nodo controllato.

Potrei cambiare tutte le mie linee require per caricare l'importazione relativa ma questo sembra complicato per un grande progetto.

risposta

0

Non penso che ci sia un modo elegante per farlo senza cambiare require, che dovrebbe essere evitato. Se sei preoccupato per problemi di prestazioni, potrebbe aiutarti a dormire la notte sapendo che ciò si verifica solo una volta a causa della memorizzazione nella cache del modulo.

Forse puoi require tutti i moduli necessari durante l'avvio della tua app.

0

Secondo node's docs, non c'è modo di modificare questo comportamento

Se l'identificatore del modulo passato a richiedere() non è un modulo nativo, e non inizia con '/', '../' o './', quindi il nodo inizia nella directory padre del modulo corrente e aggiunge/node_modules e tenta di caricare il modulo da quella posizione.

Se non viene trovato lì, passa alla directory padre e così via fino a raggiungere la radice del file system.

Si noti che i moduli caricati sono memorizzati nella cache, pertanto le prestazioni non dovrebbero costituire un problema. Se si utilizza Express, questo processo di caricamento viene eseguito solo all'avvio.

4

Questo comportamento (che fa troppe statistiche) è stato rimosso (vedere PR) da io.js v2.3.1, sarà disponibile nella prossima versione principale di node.js.