2013-04-04 2 views
100

Ho un'applicazione che ha il solito insieme di dipendenze su moduli di terze parti (ad esempio "express") specificato nel file package.json in dipendenze. Per esempio.come specificare i moduli locali come dipendenze del pacchetto npm

"express"  : "3.1.1" 

vorrei strutturare il mio codice modulare e hanno una serie di locali (cioè sul sistema di file sto attualmente in) moduli da installare nei pressi package.json. So che posso installare un modulo locale da corsa:

npm install path/to/mymodule 

Tuttavia, non so come fare questo accadere tramite la struttura di dipendenze package.json. L'uso dell'opzione --save in questo comando sta semplicemente inserendo "mymodule": "0.0.0" nel mio package.json (non fa riferimento alla posizione del percorso file). Se poi rimuovo la versione installata da node_modules e provo a reinstallare dal pacchetto package.json, fallisce (perché cerca "mymodule" nel registro centrale, e non sembra localmente).

Sono sicuro che è un modo di dire alla struttura "dependencies": {} che voglio che venga installata da un percorso del file system, ma non so come.

Qualcun altro ha avuto questo problema? Grazie.

+0

Una domanda davvero buona. Triste per rendersi conto che non esiste un equivalente di funzionalità per 'pacchetto.json' a ciò che abbiamo in 'Gemfile's. – Jarl

+2

possibile duplicato di [Dipendenza locale in package.json] (http://stackoverflow.com/questions/14381898/local-dependency-in-package-json) – Kelly

risposta

1

Se si tratta di dimensioni adeguate per pubblicare semplicemente i moduli preinstallati in node_modules a fianco gli altri file, si può fare in questo modo:

// ./node_modules/foo/package.json 
{ 
    "name":"foo", 
    "version":"0.0.1", 
    "main":"index.js" 
} 

// ./package.json 
... 
"dependencies": { 
    "foo":"0.0.1", 
    "bar":"*" 
} 

// ./app.js 
var foo = require('foo'); 

Si consiglia inoltre di conservare il modulo su git e informi il pacchetto padre. jSON per installare la dipendenza da git: https://npmjs.org/doc/json.html#Git-URLs-as-Dependencies

+4

Sfortunatamente ciò comporterebbe node_modules con i miei moduli locali e terze parti/contributi moduli installati dal registro (ad es. connessione) nella stessa directory. Oltre a essere confuso da una prospettiva Git/VCS (cioè dovrei ignorare tutto in node_modules tranne quelli che ho creato), è anche una cattiva pratica (quelli che ho scritto e non sono pubblicati dovrebbero essere tenuti separati da quelli che altri hanno scritto e pubblicato). –

+0

Quando aggiungo un modulo locale, apporto modifiche che non sono viste dalla mia app principale. Perché è così? –

6

non riuscivo a trovare un modo pulito, alla fine, così sono andato per creare una directory chiamata local_modules e poi aggiunto questo bashscript al package.json in Scripts-> preinstallazione

#!/bin/sh 
for i in $(find ./local_modules -type d -maxdepth 1) ; do 
    packageJson="${i}/package.json" 
    if [ -f "${packageJson}" ]; then 
     echo "installing ${i}..." 
     npm install "${i}" 
    fi 
done 
138

Come di NPM 2.0.0, l'importazione di dipendenze locali è supportata in modo nativo. Questo era documented by danilopopeye in response to a similar question. Ho copiato qui la sua risposta per aiutare chiunque abbia bisogno di trovare la risposta corretta, in quanto questa domanda si posiziona molto bene nei risultati di ricerca di Google.

Questa funzione è stata implementata nella versione 2.0.0 di npm. Per esempio:

{ 
    "name": "baz", 
    "dependencies": { 
    "bar": "file:../foo/bar" 
    } 
} 

Qualsiasi dei seguenti percorsi sono validi anche:

../foo/bar 
~/foo/bar 
./foo/bar 
/foo/bar 
+2

Questo ha funzionato per me. (Ho appena fatto un percorso relativo locale come '" mymodule ":" file: mymoduledir "' –

+1

Testato e funzionante con npm 5.0.3 –

+11

'' 'installazione npm --save ../ my-local-repo''' –

0

Dopo aver lottato molto con il comando di collegamento NPM (suggerito una soluzione per lo sviluppo di moduli locali senza la loro pubblicazione a un Registro di sistema o mantenendo una copia separata nella cartella node_modules), ho creato un piccolo modulo npm per risolvere questo problema: https://www.npmjs.com/package/lib-manager

Spero che aiuti qualcuno.