2015-06-20 8 views
5

La domanda è piuttosto semplice: esiste un modo per pubblicare due diversi moduli NPM nel registro npmjs da un singolo progetto nodejs?Come pubblicare più moduli NPM da un progetto a nodo singolo?

Ma per quelli di voi che si chiedono perché diavolo qualcuno vorrebbe farlo? ... la motivazione alla base di questa domanda potrebbe non essere troppo ovvia. Quindi permettimi di spiegare:

Io uso qualcosa di simile a un server delle app chiamato loopback. E la mia app nodejs è distribuita ordinatamente in cartelle client, comuni e server.

  1. ho spesso bisogno di riutilizzare i modelli nella mia cartella common attraverso altri progetti come bene. E anche se posso pubblicare solo quella cartella come modulo NPM separata utilizzando .npmignore per rimuovere le altre cose: /* /common/utils /common/models/*.js !/common/models/*.json

    non posso rimuovere l'ammasso dal mio attuale package.json, che è necessario per eseguire in realtà la mia applicazione, da quello che ha stato pubblicato $ npm pack $ tree -L 2 ~/dev/w2/node_modules/warehouse ~/dev/w2/node_modules/warehouse ├── README.md ├── common │   └── models ├── node_modules │   ├── ... │   └── ... └── package.json Allo stato attuale, ho filtrato tutto tranne la mia cartella common/models ma dal momento che non sono sicuro di come modificare dinamicamente il file package.json prima di imballarlo o come parte dell'imballaggio ... uno npm install inserirà il dipendenze che in realtà non sono richieste.

  2. Non sono elettrizzato all'idea di creare un progetto separato solo con modelli in esso che mi costringono ad aggiungerlo come dipendenza dal progetto principale e lo sviluppo attivo viene suddiviso in 2 progetti in cui era solo uno. npm link ecc. È un buon approccio per aggirarlo ma aggiunge complessità alla configurazione dello sviluppatore quando si creano nuove persone e ci si assicura che nessuno controlli la cosa sbagliata.

Quindi esiste un modo per pubblicare due diversi moduli NPM nel registro npmjs da un singolo progetto nodejs? O un modo per usare diversi file package.json per una pubblicazione separata ma tutti da un progetto?


Aggiornamento: qual è il mio obiettivo?

Per riutilizzare i modelli dal mio progetto principale, attraverso altri progetti, pubblicandoli come modulo NPM. SENZA rinunciare alla comodità di continuare a sviluppare il mio progetto di base come UNICA entità atomica senza npm link ecc. Che diventa fastidioso quando più di una sola persona ci sta lavorando.

+1

"E anche se mi piacerebbe pubblicare solo quella cartella come un modulo NPM separato"> ottimo "... usando .npmignore per rimuovere le altre cose ..." ... eh? Non puoi separarlo * fuori * dall'app e usarlo come un modulo nella tua app come richiesto ('comune')? Forse potresti pubblicare un codice minimale come package.json e la struttura del tuo file per dare un'idea migliore della tua situazione. – laggingreflex

+0

@laggingreflex - ha aggiornato la lingua ... come per "separarlo dall'app" ... come faccio notare nel punto 2, sto facendo questa domanda quindi non devo farlo, sono cercando di spingere la busta qui un po '. – pulkitsinghal

+0

Vorrei che la gente mi aiutasse fornendo un motivo per fare downvoting oltre a lasciarmi solo indovinare. – pulkitsinghal

risposta

2

Avendo una domanda simile, ho scoperto di recente: https://github.com/lerna/lerna, che potrebbe essere utile.

Dal readme:

Frazionamento grandi basi di codice in separati versionate indipendentemente pacchetti è estremamente utile per la condivisione del codice. Tuttavia, apportare modifiche a in molti repository è complicato e difficile da tracciare e il test di tra repository si complica molto rapidamente.

Per risolvere questi (e molti altri) problemi, alcuni progetti organizzeranno le loro codebase in repository multi-package (talvolta denominati monorepos).Progetti come Babel, React, Angular, Ember, Meteor, Jest, e molti altri sviluppano tutti i loro pacchetti all'interno di un unico repository .

Lerna è uno strumento che ottimizza il flusso di lavoro intorno alla gestione di repository multi-pacchetto con git e npm.

1

Un'altra opzione è to use Bit.

Dal readme:

Bit lavora con Git e NPM per rendere più facile la condivisione del codice e la sincronizzazione variazioni tra i progetti.

Invece di creare nuovi repository per i pacchetti o ristrutturazione del progetto, si può immediatamente isolare e condividere qualsiasi parte di qualsiasi repository esistente e utilizzare i gestori di pacchetti preferiti installarlo in altri progetti.

Invece di configurare e di apportare modifiche a più pacchetti repository o directory, si può semplicemente modificare il codice di condividere da qualsiasi altro progetto e facilmente sincronizzare le modifiche tra tutti i vostri progetti.

Problemi correlati