Ez egy kicsit hacky de működni fog.
Azt gondoltam, ez nagyon ugyanaz tegnap, és én ellenőrizték a kódot. Ha bejelöli bin / typscript.js el a forráskód (Ez egy nagyon nagy fájl, közel 21k sornyi kódot), akkor látni teremt TypeScript.TypeScriptCompiler, és akkor azt találjuk, hogy ez ki olyan módon összeállításának .
var compiler = new TypeScript.TypeScriptCompiler(outfile, errorfile,
new TypeScript.NullLogger(), settings);
Most kell egy egyszerű módja annak, hogy tegye azt. Ehhez meg kell majd módosítani a kódot, ezért ez hacky. Ehhez, akkor módosítani typescript.js hozzáadásával:
module.exports = exports = TypeScript;
Jobb a végén a fájlt.
Ezután létrehozhat egy index.js fájlt a gyökér a modul (megjegyzés: A modul telepíthető a helyi teret mindezt: „NPM telepíteni géppel”), amely feltárja az objektumot.
exports.TypeScript = require("bin/typescript");
És kész! Most már csak hívja, és fordítsa le a kódot használja. Meg tudja nézni, hogyan kell használni az API-t összeállítás a tsc.js fájlt.
Elnézést kérek előre a szörnyű kódot előre:
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();
Valamilyen oknál fogva, aki írta a kódot egy igazi rajongó C # és hozzálátott, hogy menjen előre, és olyan módszereket hívott WriteLine nevû, Close és írása, amelyek valójában csak csomagolást. Lehet, hogy ez a felső kelljen adni ezt a funkciót, de ha lett volna módosítani egy csomó kód a modulban, és ez nem éri meg. Azt hiszem, a legjobb, ha egy osztály kiterjesztése (vagy ha még JS, öröklik a prototípus), és hagyjuk, hogy ezt, hogy az Ön számára, annak érdekében, hogy száraz.
Valami igazán szép, hogy ha azt akarjuk lefordítani 500 géppel fájlokat, és tegye őket egyetlen Js fájlt, akkor csak hívja compiler.addUnit (anothercontent, anotherpath); 500-szor, majd látni, hogy minden megy egy fájlba :)
Összpontosítva jobb dolog: ha bejelöli tsc.js kódot, meg fogja találni a batch fordító osztály. Ha azt szeretnénk, ezt a fordítási folyamat, lehet, hogy jobb, ha valami erőteljesebb, mint ez. Ez biztosítja figyeli a fájlok és így tovább.
Miután böngészett a kódot, azt hiszem, csak be egy jegyet a fejlesztő csapat, és felkéri őket arra, hogy világosabban API ¬¬
Megjegyzés: Az összes fájl olvasás itt történik szinkron módon. Ez rossz, nagyon rossz, a teljesítmény tekintetében. Nem tudom pontosan, hogy mit tervez csinálni, de nem tudtam ajánlani annál, hogy megtalálja a módját, hogy ezt aszinkron, ha lehetséges.