2015-08-07 15 views
6

Mi sono trovato in una situazione in cui devo eseguire un singolo comando, ad es. node compile.jsEsegui pacchetto nodo + Argomenti da un altro script

che js file deve eseguire il seguente

browserify -t jadeify client/app.js -o bundle.js

Tutte le dipendenze sono installati, e per l'esecuzione di questo comando nella CLI funziona bene, solo bisogno di capire come eseguire da all'interno di uno script di nodo.

Abbiamo anche all'interno della nostra package.json la seguente che contiene qualcosa di simile a

"script" : [ "compile": "browserify -t jadeify client/app.js -o bundle.js" ] questo funziona perfettamente quando si esegue cd /project && npm run compile tramite ssh, tuttavia, non tramite exec

Grazie

+0

Altro che invocare un processo separato, è anche possibile utilizzare [api browserify] (https://github.com/substack/node-browserify#api-example) nella tua 'file compile.js'. – hassansin

+0

Certo, ma questo è quello che non so come fare, quindi ho bisogno di un esempio/fatto - non posso trovare alcun risultato su google che sia utile – Owen

+0

possibile duplicato di [esecuzione del comando shell node.js] (http: // stackoverflow. com/q/14458508/1168892)? l'applicazione della soluzione porta a 'require ('child_process'). spawn ('browserify', ['-t', 'jadeify', 'client/app.js', '-o', 'bundle.js])' –

risposta

1

È possibile accedere agli argomenti dello script tramite process.argv.

Un array contenente gli argomenti della riga di comando. Il primo elemento sarà 'nodo', il secondo elemento sarà il nome del file JavaScript. Gli elementi successivi saranno gli argomenti aggiuntivi della riga di comando.

È quindi possibile utilizzare browserify api insieme a jadeify per ottenere ciò che è necessario.

var browserify = require('browserify')(); 
var fs = require('fs'); 

var lang = process.argv[2]; 
console.log('Doing something with the lang value: ', lang); 

browserify.add('./client/app.js'); 
browserify.transform(require("jadeify")); 
browserify.bundle().pipe(fs.createWriteStream(__dirname + '/bundle.js')); 

Run con $ node compile.js enGB

2

È dovrebbe essere in grado di utilizzare api-example ed estenderlo con la trasformazione come suggerito dal paragrafo jadeify setup.

var browserify = require('browserify'); 
var fs = require('fs'); 
var b = browserify(); 
b.add('./client/app.js'); 

// from jadeify docs 
b.transform(require("jadeify")); 

// simple demo outputs to stdout, this writes to a file just like your command line example. 
b.bundle().pipe(fs.createWriteStream(__dirname + '/bundle.js')); 
+0

Grazie Simon per il tuo generoso contributo! Domani darò un'occhiata a questo: non ho mai fatto nessuno script di nodo quindi questo è al 100% nuovo per me, quindi la tua risposta chiara e semplice è molto apprezzata. Sareste comunque in grado di indicarmi la direzione di come passare una variabile/stringa nello script? es. 'node compile.js --lang enGB', molte grazie – Owen

+0

@owen Dovresti dare un'occhiata a https://www.npmjs.com/package/minimist, come suggerito nelle risposte su http: // stackoverflow. it/questions/4351521/how-to-pass-command-line-arguments-to-node-js –

+0

@OwenMelbourne ha funzionato? Vedo che hai messo una taglia, ma perché chiedere di php exec quando non è nella domanda originale? (Dovresti essere in grado di eseguire la versione da riga di comando usando php exec bene, se non funziona probabilmente è un problema con il percorso dell'eseguibile, un'impostazione dell'ambiente o qualcosa legato al permesso) –

Problemi correlati