Dies ist ein bisschen hacky aber es wird funktionieren.
Ich dachte an diesem selben gestern und ich war die Überprüfung ihres Codes. Wenn Sie ist überprüfen / typscript.js von ihrem Quelltext (Es ist eine sehr sehr große Datei, mit fast 21k Zeilen Code), sehen Sie, es schafft TypeScript.TypeScriptCompiler, und dann werden Sie feststellen, dass dies eine Art und Weise aussetzt kompiliert .
var compiler = new TypeScript.TypeScriptCompiler(outfile, errorfile,
new TypeScript.NullLogger(), settings);
Nun müssen Sie eine einfache Möglichkeit, es zu belichten. Um dies zu tun, müssen Sie ihren Code ändern, weshalb diese Hacky ist. Um dies zu tun, könnten Sie ändern typescript.js durch Zugabe von:
module.exports = exports = TypeScript;
Ganz am Ende der Datei.
(: Installieren Sie das Modul in einem lokalen Rahmen für all dies: „npm installieren Typoskript“ notice), die das Objekt belichtet dann können Sie eine index.js Datei im Root des Moduls erstellen.
exports.TypeScript = require("bin/typescript");
Und fertig! Jetzt können Sie es einfach anrufen und Ihren Code kompilieren Sie es. Sie können prüfen, wie die API für die Kompilierung in der tsc.js-Datei zu verwenden.
Ich entschuldige mich im Voraus für den schrecklichen Code im Voraus:
var fs = require("fs");
var TypeScript = require("typescript");
var path = "test.ts";
var pathout = "test.js";
var content = fs.readFileSync(path, "utf-8");
var fd = fs.openSync(pathout, 'w');
var outFile = {
Write: function (str) {
fs.writeSync(fd, str);
},
WriteLine: function (str) {
console.log(fd, str);
fs.writeSync(fd, str + '\r\n');
},
Close: function () {
fs.closeSync(fd);
fd = null;
}
};
var createFile = function (path) {
function mkdirRecursiveSync(path) {
var stats = fs.statSync(path);
if(stats.isFile()) {
throw "\"" + path + "\" exists but isn't a directory.";
} else {
if(stats.isDirectory()) {
return;
} else {
mkdirRecursiveSync(_path.dirname(path));
fs.mkdirSync(path, 509);
}
}
}
mkdirRecursiveSync(_path.dirname(path));
console.log(path)
var fd = fs.openSync(path, 'w');
return {
Write: function (str) {
fs.writeSync(fd, str);
},
WriteLine: function (str) {
fs.writeSync(fd, str + '\r\n');
},
Close: function () {
fs.closeSync(fd);
fd = null;
}
};
};
var stderr = {
Write: function (str) {
process.stderr.write(str);
},
WriteLine: function (str) {
process.stderr.write(str + '\n');
},
Close: function () {
}
}
var compiler = new TypeScript.TypeScriptCompiler(outFile, outFile);
compiler.setErrorOutput(stderr);
compiler.addUnit(content, path);
compiler.typeCheck();
compiler.emit(false, createFile);
outFile.Close();
Aus irgendeinem Grund war, wer den Code schrieb ein echter Fan von C # und ging voran und Verwendung Methoden genannt Console.WriteLine, Schließen und Schreiben, um zu gehen, die nur Wrapper tatsächlich sind. Man könnte dies der Ober werde diese Funktionen hinzufügen zu müssen, aber Sie würden eine Menge Code in das Modul ändern müssen, und es ist es nicht wert. Ich denke, dass es am besten ist, eine Klasse zu haben, zu verlängern (oder wenn Sie noch auf JS sind, erben den Prototyp) und lassen Sie es, dass für Sie tun, um es trocken.
Etwas wirklich schön ist, dass, wenn Sie 500 Typoskript Dateien übersetzen und sie alle in einer einzigen JS-Datei, kann man einfach compiler.addUnit (anothercontent, anotherpath) nennen; 500-mal und dann sehen sie alle gehen in eine einzige Datei :)
Die Konzentration auf bessere Dinge: Wenn Sie tsc.js Code überprüfen, werden Sie eine Batch-Compiler Klasse finden. Wenn Sie dies für einen Build-Prozess wollen, könnte es besser sein, etwas robuster wie es zu benutzen. Es stellt Dateien und mehr zu beobachten.
Nachdem Sie den Code durchsucht, ich denke, ich werde nur ein Ticket für das Entwicklungsteam vor und fordert sie eine klarere API zur Verfügung zu stellen ¬¬
Hinweis: Alle Datei liest hier in synchroner Weise. Das ist schlecht, sehr schlecht, in Bezug auf Leistung. Ich weiß nicht genau, was Sie tun wollen, aber ich kann nicht mehr empfehlen, dass Sie einen Weg finden, diese async wenn möglich zu machen.