2012-08-31 16 views
6

Quale sarebbe il modo preferito per gestire i moduli interni all'interno di un'applicazione node.js?Come gestire i moduli Node.JS interni

Voglio dire, attualmente abbiamo un'applicazione abbastanza grande e ci sono diverse dipendenze, installate tramite npm. Abbiamo node_modules in .gitignore. Pertanto non è nel repository. Usiamo npm shrinkwrap per congelare le versioni dei moduli, quindi, al momento dell'implementazione, un npm install mette insieme tutto ciò di cui abbiamo bisogno in node_modules.

Il problema è che, dal momento che la nostra app si sta ingrandendo, vogliamo dividerla in moduli più piccoli. Ora, se creo un modulo foo e lo metto in node_modues, ho bisogno di permetterlo nel repository, che non sembra così accurato da avere entrambi i moduli ignorati e controllati in node_modules.

Non possiamo pubblicarli sul registro di NPM perché non sono realmente "pubblici".

C'è qualche soluzione ovvia di cui non sono a conoscenza?

+1

Basta incollare le mie librerie/moduli privati ​​in una directory '/ lib' sotto il progetto invece che in' npm_modules'. In questo modo possono anche essere inclusi in Git. –

+0

Sì, è molto comune avere una cartella lib e richiedere ('./ lib/myThing') –

+2

Con la cartella lib, ho bisogno di nominare i moduli esplicitamente ogni volta che ne ho bisogno. Ho bisogno di loro molto :) Da tutti i tipi di posti. Non mi piace molto 'require (" ../../../../../ lib/foo ")'. Averli in moduli di nodi rende l'accesso molto più facile. –

risposta

7

Sono d'accordo con la tua estetica di non mescolare roba non-repo di terze parti con i contenuti controllati dalla revisione in-house.

La variabile del percorso di ricerca NODE_PATH può essere d'aiuto qui, è possibile utilizzare una directory diversa con contenuto sotto controllo di revisione.

http://nodejs.org/api/modules.html

A seconda del vostro appetito per la flessibilità vs complessità, si può prendere in considerazione un passaggio di generazione che in realtà copia i vari moduli dei nodi da ovunque ci si tenerli, in una directory di output ("node_modules denominati" probabilmente, ma non necessariamente).

+0

NODE_PATH sembra essere l'approccio più elegante qui. Posso solo tenere tutto in lib/e farli riferimento per nome in require. Dal momento che la variabile d'ambiente è adeguatamente documentata, non penso che possa essere considerata un trucco o qualcosa del genere :) Grazie. –

5

Una soluzione comune è quella di memorizzare i moduli in un repository Git privato da qualche parte e quindi utilizzare un URL git:// come dipendenza; npm sa come clonare i repository come dipendenze.

+0

Grazie, ho valutato questo, ma poi, ho bisogno in qualche modo di autorizzare i nostri server ad accedere ai repository git privati. O tramite la chiave pubblica del server o l'intervallo IP. Comunque funzionerebbe. –

Problemi correlati