La situazione sarebbe:
Sviluppo 2 progetti nel mio ambiente di sviluppo Node.js, P1 e P2.
P1 ha richiesto lo sviluppo di due moduli semplici, mod1 e mod2, che sono memorizzati in P1/lib
. Ciascuno di questi moduli risolve trovare le loro dipendenze esterne in P1/node_modules
. Le dipendenze necessarie per P1 sono state installate in questa cartella tramite npm.
Ora immagine vogliamo riutilizzare mod1 nell'altro proyect P2, ecco i miei dubbi. Potrei ...
-
copia semplicemente mod1 in
P2/lib
. Replica, quindi non considero nemmeno questa opzione. -
Da P2, riferimento mod1 da P1:
require($PROJECTS_DIR + '/P1/lib/mod1')
. Non è una buona opzione, in questo modo P2 dipenderebbe da P1. -
Metti mod1 in una directory di livello superiore o usando NODE_PATH, in modo che P1 e P2 possano risolverlo semplicemente doint
require('mod1')
. Tuttavia, durante la distribuzione, dovrei anche distribuire questa directory di livello superiore che sembra un po 'sporca. -
Vorrei trattare mod1 come un modulo npm, quindi può essere facilmente installato in qualsiasi progetto o ambiente, tuttavia, in questo caso particolare, non posso pubblicare il modulo su npm perché è troppo project- specifico. Potrei creare un repository privato di npm e inserire mod1 all'interno. L'essenza di questo sarebbe configurarlo per poter accedere anche dall'ambiente di produzione. Ne vale la pena?
-
Che dire mettere tutto insieme in
node_modules
? (dipendenze esterne e mie librerie personali). Sarebbe bello visto che i moduli possono essere richiesti solo come 'require (' module '). Ma sembra anche abbastanza sporco. -
Non sei sicuro di come
npm link
funzionerebbe durante la distribuzione. Crea un collegamento simbolico, che non viene seguito quando si esegue il codice tramite Git o SVN. Se eseguonpm install
in produzione, installerò anche il modulo collegato?
Nessuno dei precedenti mi soddisfa abbastanza. Non so se uno di questi è adatto, o voi avete altri suggerimenti, ma esistono dei metodi preferiti per strutturare le proprie librerie private in modo che possano essere facilmente riutilizzati in altri progetti?