Risposte:
Dalla documentazione di npm-link :
Nella directory del modulo locale:
$ cd ./package-dir
$ npm link
Nella directory del progetto per utilizzare il modulo:
$ cd ./project-dir
$ npm link package-name
O in una volta sola usando i percorsi relativi:
$ cd ./project-dir
$ npm link ../package-dir
Ciò equivale a usare due comandi sopra sotto il cofano.
npm link
creerà una seconda istanza di dipendenze esterne. Quindi, se hai un pacchetto A che necessita di B e C, B ha bisogno di C. il collegamento B farà sì che l'applicazione A abbia due istanze di C.
devi solo fornire un <folder>
argomento a npm install
, l'argomento dovrebbe puntare verso la cartella locale anziché il nome del pacchetto:
npm install /path
rm -rf node_modules
prima e npm install
dopo aver eseguito lo script della risposta.
Dato che mi è stato chiesto e risposto dalla stessa persona, in alternativa aggiungerò un link npm .
dai documenti:
Questo è utile per installare le tue cose, in modo che tu possa lavorarci e testarlo iterativamente senza doverlo ricostruire continuamente.
cd ~/projects/node-bloggy # go into the dir of your main project
npm link ../node-redis # link the dir of your dependency
[Modifica] A partire da NPM 2.0, è possibile dichiarare dipendenze locali in package.json
"dependencies": {
"bar": "file:../foo/bar"
}
npm link
una volta la cartella (per creare un collegamento simbolico globale) e quindi eseguire npm link package-name
all'interno della cartella del progetto (per utilizzare il collegamento simbolico globale nel progetto). La risposta di seguito è la risposta giusta.
file:
approccio) ha permesso alla mia app e al modulo locale di condividere una dipendenza. Il mio test ha npm link
prodotto una dipendenza duplicata, che interrompe le cose se la dipendenza deve essere utilizzata come singleton.
npm pack
+ package.json
Questo è ciò che ha funzionato per me:
module project
, eseguire npm pack
:Questo costruirà un <package-name>-<version>.tar.gz
file.
consumer project
Idealmente puoi mettere tutti questi file in una tmp
cartella nella tua consumer-project
radice:
package.json
:"dependencies": {
"my-package": "file:/./tmp/my-package-1.3.3.tar.gz"
}
Install
i pacchetti:npm install
oppure npm i
oppureyarn
consumer-project's node_modules
cartella.In bocca al lupo...
Nessuno di questi approcci ( npm link
o package.json
dipendenza dai file) funziona se il modulo locale ha dipendenze tra pari che si desidera installare solo nell'ambito del progetto.
Per esempio:
/local/mymodule/package.json:
"name": "mymodule",
"peerDependencies":
{
"foo": "^2.5"
}
/dev/myproject/package.json:
"dependencies":
{
"mymodule": "file:/local/mymodule",
"foo": "^2.5"
}
In questo scenario, gli insiemi NPM up myproject
's node_modules/
in questo modo:
/dev/myproject/node_modules/
foo/
mymodule -> /local/mymodule
Quando il nodo si carica mymodule
e lo fa require('foo')
, il nodo risolve il mymodule
collegamento simbolico e quindi cerca solo /local/mymodule/node_modules/
(e i suoi antenati) foo
, che non trova. Invece, vogliamo che il nodo guardi /local/myproject/node_modules/
, dato che è da lì che stavamo eseguendo il nostro progetto e dove foo
è installato.
Quindi, o abbiamo bisogno di un modo per dire al nodo di non risolvere questo link simbolico durante la ricerca foo
, o abbiamo bisogno di un modo per dire a npm di installare una copia di mymodule
quando viene utilizzata la sintassi della dipendenza file package.json
. Purtroppo non ho trovato un modo di fare neanche :(
NODE_PATH
per indicare node_modules/
dove foo
è installato. Quindi, per il caso precedente, sarebbe questo: NODE_PATH=/dev/myproject/node_modules/
che consente mymodule
di trovare foo
.
Come hanno risposto le persone precedenti npm --save ../location-of-your-packages-root-directory
. Il ../location-of-your-packages-root-directory
tuttavia deve avere due cose in ordine per farlo funzionare.
1) package.json
in quella directory puntata verso
2) la main
proprietà in package.json
deve essere impostata e funzionante ig "main": "src/index.js",
se il file della voce ../location-of-your-packages-root-directory
è../location-of-your-packages-root-directory/src/index.js