Deze is een beetje hacky, maar het zal werken.
Ik dacht na over deze zelfde gisteren en ik was hun code te controleren. Als u bin / typscript.js controleren vanuit hun broncode (Het is een zeer groot bestand, met bijna 21K regels code), ziet u het creëert TypeScript.TypeScriptCompiler, en dan zul je merken dat dit bloot een manier van het samenstellen .
var compiler = new TypeScript.TypeScriptCompiler(outfile, errorfile,
new TypeScript.NullLogger(), settings);
Nu, een gemakkelijke manier om het te bloot nodig. Om dit te doen, moet je hun code, dat is waarom dit hacky wijzigen. Om dit te doen, kan je typescript.js wijzigen door het toevoegen:
module.exports = exports = TypeScript;
Helemaal aan het einde van het bestand.
Vervolgens kunt u een index.js bestand in de root van de module te maken (let op: installeer de module in een lokale scope voor dit alles: "NPM installeren typoscript"), die het voorwerp bloot.
exports.TypeScript = require("bin/typescript");
En klaar! Nu kun je gewoon bellen het en compileren uw code te gebruiken. U kunt controleren hoe u de API gebruiken voor het samenstellen in de tsc.js bestand.
Ik verontschuldig me bij voorbaat voor de verschrikkelijke code vooruit:
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();
Om een of andere reden wie schreef de code was een echte fan van C # en ging om verder te gaan en te gebruiken methoden genoemd WriteLine, Close en schrijven, die in feite gewoon wrappers. Je kon dit te krijgen van de overhead van het hebben van deze functies toe te voegen, maar je zou hebben om veel van de code te wijzigen in de module en het is niet de moeite waard. Ik denk dat het het beste om een klasse uit te breiden (of als je nog op JS, erven het prototype) en laat hem dat voor je doen, om het droog te maken.
Iets wat echt leuk is dat als je wilt 500 typoscript bestanden vertalen en zet ze allemaal in een enkel .js bestand, kunt u gewoon bellen compiler.addUnit (anothercontent, anotherpath); 500 keer en dan zien het allemaal gaan in een enkel bestand :)
Gericht op betere dingen: als je tsc.js code te controleren, vindt u een batch compiler de klas. Als u deze wilt gebruiken voor een bouwproces, is het misschien beter om iets robuuster als het te gebruiken. Het voorziet kijken bestanden en nog veel meer.
Nadat de code gebladerd, ik denk dat ik zal gewoon een ticket voor de ontwikkeling team en hen vragen om een duidelijker API bieden ¬¬
Opmerking: Alle bestanden leest hier worden gedaan in een synchrone manier. Dit is slecht, heel slecht, in termen van prestaties. Ik weet niet precies wat je van plan te doen, maar ik kon niet meer dat je een manier om dit asynchrone maken als mogelijk te adviseren.