Voglio provare a utilizzare npm per eseguire le varie attività di compilazione per un'applicazione Web. So che posso fare questo con l'aggiunta di un campo scripts
al mio package.json
in questo modo:Esecuzione di script bash con npm
"scripts": {
"build": "some build command"
},
Questo diventa ingombrante quando si dispone di comandi più complessi con una serie di opzioni. È possibile spostare questi comandi su uno script bash o qualcosa del genere? Qualcosa di simile:
"scripts": {
"build": "build.sh"
},
dove npm run build
sarebbe eseguire i comandi nel file build.sh
?
Leggendo this post it sembra che sia, ma non sono chiare su esattamente dove dovrei far cadere il mio file build.sh
o se mi manca qualcosa.
Non farlo. Il nodo funziona ovunque. Bash no. Qualunque cosa tu stia facendo in bash puoi fare ** nel nodo **, e anche l'invocazione CLI può essere fatta usando le dipendenze del pacchetto. Hai bisogno di 'rm'? installa rimraf, quindi usalo in uno [npm script] (http://www.slideshare.net/k88hudson/advanced-frontend-automation-with-npm-scripts). 'mkdir -p'? installa 'mkdirp' e poi usalo in uno script npm. Hai un * linguaggio di scripting universale indipendente dalla piattaforma *, proprio lì, non andare e fingere che sia solo Nix. La linea di comando diventa troppo complicata? Usa un task runner come 'grunt' o' gulp'. Keep it universal –
Quando si dice "si può fare anche l'invocazione CLI usando le dipendenze del pacchetto" si sta parlando di qualcosa come [questo] (http://blog.npmjs.org/post/118810260230/building-a-simple-command-line-tool -con-NPM)? –
chiudi ma no, leggi le diapositive a cui mi sono collegato. È possibile installare i moduli nodo forniti con strumenti CLI, come 'grunt', o' gulp', o 'mkdirp', ecc., Senza che sia necessario installarli globalmente, quindi * richiamarli come se fossero installati globalmente * in uno script npm, come '" build ":" mkdirp build && less style/index.less> static/css/style.css && webpack "'. Finché i comandi che invochi sono gestiti da npm (cioè negli elenchi delle dipendenze di package.json), questo funziona. Per ogni comando "questo funziona solo per un SO", usa un modulo nodo che fa la stessa cosa universalmente. –