Éste es un poco hacky pero funcionará.
Pensé en este mismo ayer y yo estaba revisando su código. Si marca bin / typscript.js de su código fuente (Es un archivo muy muy grande, con casi 21k líneas de código), verá que crea TypeScript.TypeScriptCompiler, y luego se dará cuenta de que esto no exponer una forma de compilar .
var compiler = new TypeScript.TypeScriptCompiler(outfile, errorfile,
new TypeScript.NullLogger(), settings);
Ahora, necesita una manera fácil de exponerlo. Para ello, tendrá que modificar su código, por lo que este es hacky. Para ello, podría modificar typescript.js añadiendo:
module.exports = exports = TypeScript;
Justo al final del archivo.
A continuación, puede crear un archivo de index.js en la raíz del módulo (aviso: instalar el módulo en un ámbito local para todo esto: "NGP instalar mecanografiado"), que expone el objeto.
exports.TypeScript = require("bin/typescript");
¡Y listo! Ahora sólo se puede llamar y compilar el código de usarlo. Puede comprobar cómo utilizar la API para la compilación en el archivo tsc.js.
Me disculpo de antemano por el código horrible, por delante:
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();
Por alguna razón el que escribió el código fue un verdadero fan de C # y procedió a seguir adelante y métodos de uso de llama WriteLine, Cerrar y escritura, que son, de hecho, sólo las envolturas. Se podría conseguir este de la sobrecarga de tener que añadir estas funciones, pero que tendría que modificar una gran cantidad de código en el módulo y que no vale la pena. Creo que lo mejor es tener una clase para extender (o si usted todavía está en JS, heredad el prototipo) y deja que haga eso por ti, para que se seque.
Algo muy interesante es que si quieres traducir 500 archivos de texto mecanografiado y poner a todos en un solo archivo .js, que sólo puede llamar compiler.addUnit (anothercontent, anotherpath); 500 veces y luego ver que todos van en un solo archivo :)
Centrándose en mejores cosas: si marca tsc.js código, se encuentra una clase de lote compilador. Si desea que esta para un proceso de construcción, tal vez sería mejor usar algo más robusto como él. Proporciona archivos de observación y más.
Después de haber navegado por el código, creo que sólo voy a enviar un ticket al equipo de desarrollo y pedirles que aporten una API más claro ¬¬
Nota: Todos los archivos se lee aquí se hace de una manera sincrónica. Esto es malo, muy malo, en términos de rendimiento. No sé exactamente lo que va a hacer, pero no podía recomendar más que encontrar una manera de hacer este asíncrono, si es posible.