2015-08-07 6 views
6

Ich habe mich in einer Situation, in der ich einen einzigen Befehl ausführen müssen, z. node compile.jsRun Node Package + Argumente von einem anderen Skript

, die alle Datei muss laufen die folgenden

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

die Abhängigkeiten installiert sind, und indem Sie diesen Befehl in der CLI funktioniert gut, nur müssen, um herauszufinden, wie man führen Sie es aus js in einem Knotenscript.

Wir haben auch in unserem package.json die folgende haben die

"script" : [ "compile": "browserify -t jadeify client/app.js -o bundle.js" ] das funktioniert perfekt etwas Ähnliches wie

enthält, wenn Sie cd /project && npm run compile via ssh ausführen jedoch nicht über exec

Dank

+0

Andere als einen separaten Prozess aufgerufen wird, können Sie auch [browserify api] (https://github.com/substack/node-browserify#api-example) in Ihrem 'compile.js' Datei. – hassansin

+0

Sicher, aber das ist, was ich nicht tun kann, so benötigt ein Beispiel/es getan - kann keine Ergebnisse auf Google finden, die hilfreich sind – Owen

+0

mögliche Duplikate von [node.js Shell-Befehlsausführung] (http: // stackoverflow. com/q/14458508/1168892)? Die Anwendung der Lösung führt zu 'require ('child_process'). spawn ('browserify', ['-t', 'jadeify', 'client/app.js', '-o', 'bundle.js])' ' –

Antwort

1

Sie können über process.argv auf Skriptargumente zugreifen.

Ein Array mit den Befehlszeilenargumenten. Das erste Element ist "Knoten", das zweite Element ist der Name der JavaScript-Datei. Die nächsten Elemente werden zusätzliche Befehlszeilenargumente sein.

Sie können dann die browserify api zusammen mit jadeify verwenden, um zu bekommen, was Sie brauchen.

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 mit $ node compile.js enGB

2

Sie sollte in der Lage sein, die api-example zu verwenden und es mit der Transformation zu erweitern, wie von dem jadeify setup Absatz vorgeschlagen.

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

Vielen Dank Simon für Ihre großzügige Eingabe! Ich schaue mir das heute Abend an - ich habe noch nie ein Node-Scripting gemacht, also ist dies für mich zu 100% neu, so dass Ihre klare und einfache Antwort sehr geschätzt wird. Könntest du mir aber zeigen, wie man eine Variable/String in das Skript übergibt? zB 'node compile.js --lang deGB', vielen Dank – Owen

+0

@owen Sie sollten sich https://www.npmjs.com/package/minimist ansehen, wie in den Antworten auf http: // stackoverflow angedeutet. com/questions/4351521/how-to-pass-Kommandozeilenargumente-to-node-js –

+0

@OwenMelbourne hat es funktioniert? Ich sehe, dass Sie ein Kopfgeld geben, aber warum fragen Sie nach PHP Exec, wenn es nicht in der ursprünglichen Frage ist? (Sie sollten in der Lage sein, die Kommandozeilenversion mit php exec auszuführen, wenn es nicht funktioniert, ist es wahrscheinlich ein Problem mit dem Pfad zur ausführbaren Datei, einer Umgebungseinstellung oder etwas, das mit der Berechtigung zusammenhängt) –

Verwandte Themen