2 manuali su gulp dicono che devo installare gulp prima a livello globale (con -g flag) e poi ancora una volta localmente. Perché ne ho bisogno?
2 manuali su gulp dicono che devo installare gulp prima a livello globale (con -g flag) e poi ancora una volta localmente. Perché ne ho bisogno?
Risposte:
Quando si installa uno strumento a livello globale, deve essere utilizzato da un utente come utility da riga di comando ovunque, anche al di fuori dei progetti nodo. Le installazioni globali per un progetto nodo sono errate perché rendono più difficile la distribuzione.
L' npx
utilità in bundle npm
5.2
risolve questo problema. Con esso è possibile richiamare utilità installate localmente come utilità installate a livello globale (ma è necessario iniziare il comando con npx
). Ad esempio, se si desidera invocare un'installazione locale eslint
, è possibile eseguire:
npx eslint .
Se utilizzato in un script
campo di package.json, npm
cerca node_modules
lo strumento e i moduli installati a livello globale, quindi l'installazione locale è sufficiente.
Quindi, se sei soddisfatto (nel tuo package.json):
"devDependencies": {
"gulp": "3.5.2"
}
"scripts": {
"test": "gulp test"
}
ecc. e funzionando con npm run test
allora non dovresti aver bisogno dell'installazione globale.
Entrambi i metodi sono utili per configurare le persone con il tuo progetto poiché sudo
non è necessario. Significa anche che gulp
verrà aggiornato quando la versione viene archiviata in package.json, quindi tutti useranno la stessa versione di gulp durante lo sviluppo con il tuo progetto.
Sembra che gulp abbia un comportamento insolito quando usato a livello globale. Se utilizzato come installazione globale, gulp cerca un gulp installato localmente a cui passare il controllo. Pertanto un'installazione globale gulp richiede un'installazione locale gulp per funzionare. La risposta sopra è ancora valida. Le installazioni locali sono sempre preferibili alle installazioni globali.
./node_modules/.bin/gulp
.
gulp
e coffee
quindi i comandi funzionano dalla radice del mio progetto nodo (ad es. alias gulp="node_modules/.bin/gulp"
). In questo modo i comandi sono facili da usare se necessario e non si verificano conflitti di versione globale / locale.
gulp
, mi dà il seguente messaggio di errore Local gulp not found in ...
. Per quanto ho capito, dovrebbe prima guardare i nodi_moduli locali e se non lo trova dovrebbe guardare nei moduli installati a livello globale, non è vero? Grazie!
TLDR; Ecco perché :
Il motivo per cui funziona è perché
gulp
tenta di eseguire il tuogulpfile.js
utilizzo della versione installata localmente digulp
, vedi qui . Da qui il motivo di un'installazione globale e locale di gulp.
In sostanza, quando installi gulp
localmente lo script non è nel tuo PATH
e quindi non puoi semplicemente digitare gulp
e aspettarti che la shell trovi il comando. Installandolo a livello globale lo gulp
script entra nel tuo PATH
perché la node/bin/
directory globale è molto probabilmente sul tuo percorso.
Per rispettare le dipendenze locali, tuttavia, gulp
utilizzerà la versione installata localmente di se stesso per eseguire il gulpfile.js
.
gulp
pacchetto installato a livello globale è necessario per mettere node_modules/.bin/gulp
in percorso. Lo spazio di archiviazione è economico ma buttare via MB per simulare un symlink è pura sciatteria dell'IMO.
È possibile collegare a livello globale installato gulp
localmente con
npm link gulp
npm link
.
La domanda " Perché dobbiamo installare gulp a livello globale e locale? " Può essere suddivisa nelle due domande seguenti:
Perché devo installare gulp localmente se l'ho già installato a livello globale?
Perché devo installare gulp a livello globale se l'ho già installato localmente?
Molti altri hanno fornito risposte eccellenti a queste domande in modo isolato, ma ho pensato che sarebbe stato utile consolidare le informazioni in una risposta unificata.
Perché devo installare gulp localmente se l'ho già installato a livello globale?
La logica per l'installazione di gulp localmente comprende diversi motivi:
Perché devo installare gulp a livello globale se l'ho già installato localmente?
Per evitare l'installazione a livello locale è possibile utilizzare npm link [package]
, ma il comando di collegamento e il install --global
comando non sembrano supportare l' --save-dev
opzione, il che significa che non sembra esserci un modo semplice per installare gulp a livello globale e quindi aggiungere facilmente qualunque versione sia il tuo file package.json locale.
In definitiva, credo che abbia più senso avere la possibilità di utilizzare moduli globali per evitare di duplicare l'installazione di strumenti comuni su tutti i tuoi progetti, specialmente nel caso di strumenti di sviluppo come grunt, gulp, jshint, ecc. Purtroppo sembra che finisci per combattere un po 'gli strumenti quando vai contro il grano.
Tecnicamente non è necessario installarlo a livello globale se la node_modules
cartella nell'installazione locale è nella propria PATH
. Generalmente questa non è una buona idea.
In alternativa se si fa npm test
riferimento gulp
allora puoi semplicemente digitare npm test
e verrà eseguito il gulp locale.
Non ho mai installato gulp a livello globale - penso che sia una cattiva forma.
Non sono sicuro che il nostro problema fosse direttamente correlato all'installazione di gulp solo localmente. Ma abbiamo dovuto installare noi stessi un sacco di dipendenze. Ciò ha portato a un "enorme" package.json e non siamo sicuri che sia davvero un'ottima idea installare gulp solo localmente. Abbiamo dovuto farlo a causa del nostro ambiente di costruzione. Ma non consiglierei l'installazione di gulp non a livello globale se non è assolutamente necessario. Abbiamo riscontrato problemi simili come descritto nel seguente post sul blog
Nessuno di questi problemi sorge per nessuno dei nostri sviluppatori sui loro computer locali perché tutti hanno installato gulp a livello globale. Sul sistema di build abbiamo riscontrato i problemi descritti. Se qualcuno è interessato, potrei approfondire questo problema. Ma in questo momento volevo solo menzionare che non è un percorso facile per installare gulp solo localmente.
Solo perché non l'ho visto qui, se sei su MacOS o Linux, ti suggerisco di aggiungere questo al tuo PERCORSO (nella tua base ecc.):
node_modules/.bin
Con questa voce relativa del percorso, se ci si trova nella cartella principale di qualsiasi progetto nodo, è possibile eseguire qualsiasi strumento da riga di comando (eslint, gulp, ecc. Ecc.) Senza preoccuparsi di "installazioni globali" o npm run
ecc.
Una volta fatto questo, non ho mai installato un modulo a livello globale.