Voglio fare qualcosa di simile, quindi npm install
installa anche il package.json
di ../somelocallib
o più importante le sue dipendenze.
"dependencies": {
"express": "*",
"../somelocallib": "*"
}
Voglio fare qualcosa di simile, quindi npm install
installa anche il package.json
di ../somelocallib
o più importante le sue dipendenze.
"dependencies": {
"express": "*",
"../somelocallib": "*"
}
Risposte:
Questa funzione è stata implementata nella versione 2.0.0 di npm. Esempio:
{
"name": "baz",
"dependencies": {
"bar": "file:../foo/bar"
}
}
È valido anche uno dei seguenti percorsi:
../foo/bar
~/foo/bar
./foo/bar
/foo/bar
Il pacchetto locale verrà copiato nel prefisso ( ./node-modules
).
Metti somelocallib
come dipendenza nel tuo package.json
normale:
"dependencies": {
"somelocallib": "0.0.x"
}
Quindi esegui npm link ../somelocallib
e npm installerà la versione su cui stai lavorando come link simbolico .
app@0.0.1 /private/tmp/app
└── somelocallib@0.0.1 -> /private/tmp/somelocallib
Riferimento: link (1)
npm dedup
per risolvere questo problema. npmjs.org/doc/cli/npm-dedupe.html
npm install <folder>
descrizione dice Installa il pacchetto nella directory come link simbolico nel progetto corrente.
Ora è possibile specificare package.json
direttamente i percorsi di installazione del modulo Node locale . Dai documenti:
Percorsi locali
A partire dalla versione 2.0.0 è possibile fornire un percorso a una directory locale che contiene un pacchetto. I percorsi locali possono essere salvati utilizzando
npm install -S
onpm install --save
, utilizzando uno di questi moduli:../foo/bar ~/foo/bar ./foo/bar /foo/bar
nel qual caso verranno normalizzati in un percorso relativo e aggiunti al tuo
package.json
. Per esempio:{ "name": "baz", "dependencies": { "bar": "file:../foo/bar" } }
Questa funzione è utile per lo sviluppo offline locale e la creazione di test che richiedono l'installazione di npm in cui non si desidera colpire un server esterno, ma non devono essere utilizzati quando si pubblicano pacchetti nel registro pubblico.
"bar": "file:///home/user/src/foo/bar"
node:onbuild
immagini standard copiano solo la directory corrente e quindi tralasciano qualsiasi cosa ../foo
.
npm install
o un altro repository git sulla LAN? Quando provo il precedente e npm install da git + ssh sembra cercare nella directory node_modules e non tentare di andare su git + ssh anche se è così che sto installando il pacchetto di livello superiore.
Questo funziona per me.
Inserire quanto segue nel file package.json
"scripts": {
"preinstall": "npm install ../my-own-module/"
}
.gitignore
nella cartella del modulo, creato .npmignore
e la prima volta che l'ho eseguito ha applicato 777 in modo ricorsivo su tutte le cartelle tranne node_modules
. Ma sì, ha installato le dipendenze. Utilizzando npm versione 1.4.14.
"dependencies": { "my-own-module": "file:../my-own-module" }
?
npm link
è che non è necessario farlo npm install
ogni volta per aggiornare le proprie dipendenze.
Se vuoi automatizzare ulteriormente questo, perché stai controllando il tuo modulo nel controllo della versione e non vuoi fare affidamento sugli sviluppatori che ricordano il collegamento npm, puoi aggiungerlo alla sezione "script" di package.json:
"scripts": {
"postinstall": "npm link ../somelocallib",
"postupdate": "npm link ../somelocallib"
}
Questo sembra al di là di confusione, ma sembra "funzionare". Ho avuto la mancia da questo numero di npm: https://github.com/npm/npm/issues/1558#issuecomment-12444454
postinstall
e postupdate
invece di preinstall
e preupdate
?
Ecco come aggiungere le dipendenze locali:
npm install file:src/assets/js/FILE_NAME
Aggiungilo a package.json da NPM:
npm install --save file:src/assets/js/FILE_NAME
Aggiungi direttamente a package.json in questo modo:
....
"angular2-autosize": "1.0.1",
"angular2-text-mask": "8.0.2",
"animate.css": "3.5.2",
"LIBRARY_NAME": "file:src/assets/js/FILE_NAME"
....
Ecco il pacchetto.json che utilizzerai per il progetto principale:
"dependencies": {
"express": "*",
"somelocallib": "file:./somelocallib"
}
Qui ./somelocallib
c'è il riferimento alla cartella della libreria rispetto al progetto master package.json .
Riferimento: https://docs.npmjs.com/files/package.json#local-paths
Gestisci le dipendenze della tua biblioteca.
Oltre a correre npm install
, dovrai correre (cd node_modules/somelocallib && npm install)
.
Questo è un bug noto con NPM.
Riferimento: https://github.com/npm/npm/issues/1341 (alla ricerca di un riferimento più aggiornato)
Controlla nel tuo master package.lock
e somelocallib/package.lock
nel tuo gestore del codice sorgente.
Quindi nel tuo Dockerfile usa:
FROM node:10
WORKDIR /app
# ...
COPY ./package.json ./package-lock.json ./
COPY somelocallib somelocallib
RUN npm ci
RUN (cd node_modules/zkp-utils/ && npm ci)
# ...
Uso la parentesi nei miei (cd A && B)
costrutti per rendere l'operazione idempotente.
So che npm install ../somelocallib
funziona.
Tuttavia, non so se la sintassi mostrata nella domanda funzionerà o meno da package.json
...
Sfortunatamente, il documento sembra menzionare l'URL solo come dipendenza.
Prova file:///.../...tar.gz
, indicando una lib locale zippata ... e dicci se funziona.
Questo ha funzionato per me: in primo luogo, assicurarsi che le directory npm abbiano l'utente giusto
sudo chown -R myuser ~/.npm
sudo chown -R myuser /usr/local/lib/node_modules
Quindi il tuo nel tuo package.json collega la directory
"scripts": {
"preinstall": "npm ln mylib ../../path/to/mylib"
},
"dependencies": {
"mylib" : "*"
}
npm install
.
In realtà, a partire da npm 2.0, ora è disponibile il supporto per i percorsi locali (vedere qui ).
Curioso ..... almeno su Windows (il mio npm è 3.qualcosa) che dovevo fare:
"dependencies": {
"body-parser": "^1.17.1",
"module1": "../module1",
"module2": "../module2",
Quando l'ho fatto npm install ../module1 --save
ha prodotto percorsi assoluti e non relativi alla documentazione.
Ho rovinato un po 'di più e ho deciso che ../xxx
era sufficiente.
In particolare, ho i moduli del nodo locale estratti per dire d: \ build \ module1, d: \ build \ module2 e il mio progetto nodo (applicazione) in d: \ build \ nodeApp.
Per "installare", io:
d:\build\module1> rmdir "./node_modules" /q /s && npm install
d:\build\module2> rmdir "./node_modules" /q /s && npm install
d:\build\nodeApp> rmdir "./node_modules" /q /s && npm install
package.json di module1 ha una dipendenza di "module2": "../module2"; module2 non ha dipendenze locali; nodeApp ha dipendenze "module1": "../module1" e "module2": "../module2".
Non sono sicuro che funzioni solo per me poiché tutte e 3 le cartelle (module1, module2 e nodeApp) si trovano sullo stesso livello .......
Due passaggi per uno sviluppo locale completo: