2016-01-22 21 views
13

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.

+7

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 –

+1

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)? –

+0

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. –

risposta

23

sua del tutto possibile ...

"scripts": { 
    "build": "./build.sh" 
}, 

anche, assicuratevi di mettere un botto hash nella parte superiore del file bash #!/usr/bin/env bash

anche fare in modo di disporre delle autorizzazioni per eseguire il file

chmod +x ./build.sh 
+0

Dove dovrebbe andare il file bash? Deve essere nella directory 'node' node_modules? –

+1

puoi metterlo dove vuoi, assicurati di mettere il percorso relativo in package.json ad esempio '" build ":". ./path/to/my/awesome/build/file/build.sh "' – eblahm

+0

cos'è con il. di fronte? Perché non è solo "build": "./build.sh"? –

Problemi correlati