Tenhle je trochu hacky, ale že to bude fungovat.
Přemýšlel jsem o této velmi stejné by to bylo včera, a já kontroloval svůj kód. Pokud zaškrtnete bin / typscript.js ze svého zdrojového kódu (Je to velmi velmi velký soubor, s téměř 21k řádků kódu), uvidíte, že vytváří TypeScript.TypeScriptCompiler, a pak zjistíte, že to vystavit způsob sestavování ,
var compiler = new TypeScript.TypeScriptCompiler(outfile, errorfile,
new TypeScript.NullLogger(), settings);
Nyní budete potřebovat snadný způsob, jak ji vystavit. Chcete-li to, budete muset změnit svůj kód, což je důvod, proč je to hacky. Chcete-li to provést, můžete upravit typescript.js přidáním:
module.exports = exports = TypeScript;
Hned na konci souboru.
Potom můžete vytvořit index.js soubor v kořenovém adresáři modulu (upozornění: instalaci modulu v místním prostor pro to vše: „NPM nainstalovat strojopis“), který odhaluje objekt.
exports.TypeScript = require("bin/typescript");
A připraven! Nyní můžete jej stačí zavolat a kompilovat kód používat. Můžete zkontrolovat, jak používat API pro kompilaci v souboru tsc.js.
Předem se omlouvám za hrozného kódu vpředu:
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();
Z nějakého důvodu, kdo napsal kód byl skutečný fanoušek C # a pokračoval jít dopředu a způsoby použití volal .WriteLine, Close a zápis, které jsou ve skutečnosti jen obaly. Dalo by se dostat to v režii museli přidat tuto funkci, ale budete muset změnit spoustu kódu v modulu a je za to nestojí. Myslím, že je lepší mít třídu rozšířit (nebo pokud jste ještě na JS, zdědí prototyp) a nechat to udělat za vás, aby to v suchu.
Něco opravdu pěkné je, že pokud chcete překládat 500 strojopisu soubory a dát je všechny do jednoho JS souboru, stačí zavolat compiler.addUnit (anothercontent, anotherpath); 500 krát a pak to všechno jít do jednoho souboru :)
Zaměřit se na lepší věci: Pokud zaškrtnete tsc.js kód najdete třídu šarže kompilátoru. Chcete-li, pro stavební proces, možná by bylo lepší použít něco robustnější líbí. Poskytuje sledují soubory a další.
Mít procházet kód, myslím, že budu jen předloží vstupenku do vývojového týmu a požádat je, aby poskytla jasnější API ¬¬
Poznámka: Všechny soubor přečte tady jsou prováděny v synchronním způsobem. To je špatné, velmi špatné, pokud jde o výkon. Nevím přesně, co máte v plánu udělat, ale nemohl jsem doporučit více než najít způsob, jak tento asynchronní pokud je to možné.