Ich habe gerade einen Cli-Helfer geschrieben, um Unix/Windows leicht zu behandeln.
JavaScript:
define(["require", "exports"], function (require, exports) {
/**
* Helfer, um die Befehlszeilenschnittstelle (CLI) einfach sowohl mit Windows als auch Unix-Umgebungen zu verwenden.
* Erfordert underscore oder lodash als global über "_".
*/
var Cli = (function () {
function Cli() {}
/**
* Führen Sie einen CLI-Befehl aus.
* Verwalten Sie Windows- und Unix-Umgebung und versuchen Sie, den Befehl auf beiden Umgebungen auszuführen, wenn er fehlschlägt.
* Reihenfolge: Windows -> Unix.
*
* @param command Auszuführender Befehl. ('grunt')
* @param args Argumente des Befehls. ('watch')
* @param callback Erfolg.
* @param callbackErrorWindows Fehler in der Windows-Umgebung.
* @param callbackErrorUnix Fehler in der Unix-Umgebung.
*/
Cli.execute = function (command, args, callback, callbackErrorWindows, callbackErrorUnix) {
if (typeof args === "undefined") {
args = [];
}
Cli.windows(command, args, callback, function () {
callbackErrorWindows();
try {
Cli.unix(command, args, callback, callbackErrorUnix);
} catch (e) {
console.log('------------- Fehler beim Ausführen des Befehls: "' + command + '" auf allen Umgebungen. -------------');
}
});
};
/**
* Führen Sie einen Befehl in der Windows-Umgebung aus.
*
* @param command Auszuführender Befehl. ('grunt')
* @param args Argumente des Befehls. ('watch')
* @param callback Erfolgsrückruf.
* @param callbackError Fehler Rückruf.
*/
Cli.windows = function (command, args, callback, callbackError) {
if (typeof args === "undefined") {
args = [];
}
try {
Cli._execute(process.env.comspec, _.union(['/c', command], args));
callback(command, args, 'Windows');
} catch (e) {
callbackError(command, args, 'Windows');
}
};
/**
* Führen Sie einen Befehl in der Unix-Umgebung aus.
*
* @param command Auszuführender Befehl. ('grunt')
* @param args Argumente des Befehls. ('watch')
* @param callback Erfolgsrückruf.
* @param callbackError Fehler Rückruf.
*/
Cli.unix = function (command, args, callback, callbackError) {
if (typeof args === "undefined") {
args = [];
}
try {
Cli._execute(command, args);
callback(command, args, 'Unix');
} catch (e) {
callbackError(command, args, 'Unix');
}
};
/**
* Führen Sie unabhängig von der Umgebung einen Befehl aus.
*
* @param command Auszuführender Befehl. ('grunt')
* @param args Argumente des Befehls. ('watch')
* @private
*/
Cli._execute = function (command, args) {
var spawn = require('child_process').spawn;
var childProcess = spawn(command, args);
childProcess.stdout.on("data", function (data) {
console.log(data.toString());
});
childProcess.stderr.on("data", function (data) {
console.error(data.toString());
});
};
return Cli;
})();
exports.Cli = Cli;
});
Typscript Ursprungsquelle Datei:
/**
* Helfer, um die Befehlszeilenschnittstelle (CLI) einfach sowohl mit Windows als auch Unix-Umgebungen zu verwenden.
* Erfordert underscore oder lodash als global über "_".
*/
export class Cli {
/**
* Führen Sie einen CLI-Befehl aus.
* Verwalten Sie Windows- und Unix-Umgebung und versuchen Sie, den Befehl auf beiden Umgebungen auszuführen, wenn er fehlschlägt.
* Reihenfolge: Windows -> Unix.
*
* @param command Auszuführender Befehl. ('grunt')
* @param args Argumente des Befehls. ('watch')
* @param callback Erfolg.
* @param callbackErrorWindows Fehler in der Windows-Umgebung.
* @param callbackErrorUnix Fehler in der Unix-Umgebung.
*/
public static execute(command: string, args: string[] = [], callback ? : any, callbackErrorWindows ? : any, callbackErrorUnix ? : any) {
Cli.windows(command, args, callback, function () {
callbackErrorWindows();
try {
Cli.unix(command, args, callback, callbackErrorUnix);
} catch (e) {
console.log('------------- Fehler beim Ausführen des Befehls: "' + command + '" auf allen Umgebungen. -------------');
}
});
}
/**
* Führen Sie einen Befehl in der Windows-Umgebung aus.
*
* @param command Auszuführender Befehl. ('grunt')
* @param args Argumente des Befehls. ('watch')
* @param callback Erfolgsrückruf.
* @param callbackError Fehler Rückruf.
*/
public static windows(command: string, args: string[] = [], callback ? : any, callbackError ? : any) {
try {
Cli._execute(process.env.comspec, _.union(['/c', command], args));
callback(command, args, 'Windows');
} catch (e) {
callbackError(command, args, 'Windows');
}
}
/**
* Führen Sie einen Befehl in der Unix-Umgebung aus.
*
* @param command Auszuführender Befehl. ('grunt')
* @param args Argumente des Befehls. ('watch')
* @param callback Erfolgsrückruf.
* @param callbackError Fehler Rückruf.
*/
public static unix(command: string, args: string[] = [], callback ? : any, callbackError ? : any) {
try {
Cli._execute(command, args);
callback(command, args, 'Unix');
} catch (e) {
callbackError(command, args, 'Unix');
}
}
/**
* Führen Sie unabhängig von der Umgebung einen Befehl aus.
*
* @param command Auszuführender Befehl. ('grunt')
* @param args Argumente des Befehls. ('watch')
* @private
*/
private static _execute(command, args) {
var spawn = require('child_process').spawn;
var childProcess = spawn(command, args);
childProcess.stdout.on("data", function (data) {
console.log(data.toString());
});
childProcess.stderr.on("data", function (data) {
console.error(data.toString());
});
}
}
Beispiel der Verwendung:
Cli.execute(Grunt._command, args, function (command, args, env) {
console.log('Grunt wurde automatisch ausgeführt. (' + env + ')');
}, function (command, args, env) {
console.error('------------- Windows "' + command + '" Befehl fehlgeschlagen, versuche Unix... ---------------');
}, function (command, args, env) {
console.error('------------- Unix "' + command + '" Befehl ist auch fehlgeschlagen. ---------------');
});