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' npxutilità in bundle npm 5.2risolve 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 scriptcampo di package.json, npmcerca node_moduleslo 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 testallora non dovresti aver bisogno dell'installazione globale.
Entrambi i metodi sono utili per configurare le persone con il tuo progetto poiché sudonon è necessario. Significa anche che gulpverrà 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.
gulpe coffeequindi 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é
gulptenta di eseguire il tuogulpfile.jsutilizzo della versione installata localmente digulp, vedi qui . Da qui il motivo di un'installazione globale e locale di gulp.
In sostanza, quando installi gulplocalmente lo script non è nel tuo PATHe quindi non puoi semplicemente digitare gulpe aspettarti che la shell trovi il comando. Installandolo a livello globale lo gulpscript entra nel tuo PATHperché la node/bin/directory globale è molto probabilmente sul tuo percorso.
Per rispettare le dipendenze locali, tuttavia, gulputilizzerà la versione installata localmente di se stesso per eseguire il gulpfile.js.
gulppacchetto installato a livello globale è necessario per mettere node_modules/.bin/gulpin percorso. Lo spazio di archiviazione è economico ma buttare via MB per simulare un symlink è pura sciatteria dell'IMO.
È possibile collegare a livello globale installato gulplocalmente 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 --globalcomando non sembrano supportare l' --save-devopzione, 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_modulescartella nell'installazione locale è nella propria PATH. Generalmente questa non è una buona idea.
In alternativa se si fa npm testriferimento gulpallora puoi semplicemente digitare npm teste 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 runecc.
Una volta fatto questo, non ho mai installato un modulo a livello globale.