Это один немного Hacky, но он будет работать.
Я думал об этом тот же только вчера, и я проверял свой код. Если вы проверяете Bin / typscript.js от их исходного кода (Это очень очень большой файл, с почти 21k строк коды), вы увидите, что он создает TypeScript.TypeScriptCompiler, и тогда вы увидите, что это разоблачить способ компиляции ,
var compiler = new TypeScript.TypeScriptCompiler(outfile, errorfile,
new TypeScript.NullLogger(), settings);
Теперь вам нужен простой способ, чтобы разоблачить его. Чтобы сделать это, вы должны изменить свой код, поэтому это Hacky. Чтобы сделать это, вы могли бы изменить typescript.js, добавив:
module.exports = exports = TypeScript;
В самом конце файла.
Затем, вы можете создать index.js файл в корневом каталоге модуль (заметьте: установить модуль в локальной области видимости для всех этих: «НОЙ установки машинописного»), который предоставляет объект.
exports.TypeScript = require("bin/typescript");
И готово! Теперь вы можете просто назвать его и скомпилировать код, используя его. Вы можете проверить, как использовать API для компиляции в файле tsc.js.
Заранее прошу прощения за ужасный код впереди:
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();
По какой-то причине тот, кто написал код был настоящим фанатом C # и продолжил идти вперед и использовать методы называются WriteLine, Закрыть и записи, которые на самом деле просто фантики. Вы можете получить это из накладного того, чтобы добавить эти функции, но вы должны изменить много кода в модуле, и это не стоит. Я считаю, что лучше иметь класс, чтобы расширить (или, если вы все еще на JS, наследуйте прототип) и пусть он сделает это для вас, чтобы сделать его DRY.
Что-то очень приятно, что если вы хотите перевести 500 Машинопись файлов и поместить их все в один .js файл, вы можете просто позвонить compiler.addUnit (anothercontent, anotherpath); В 500 раз, а затем посмотреть все идут в одном файле :)
Ориентируясь на лучшие вещи: если вы проверяете tsc.js код, вы найдете класс пакетного компилятора. Если вы хотите, чтобы это для процесса сборки, это может быть лучше использовать что-то более надежное, как это. Он предоставляет смотреть файлы и многие другие.
После просмотра кода, я думаю, я просто представить билет в команду разработчиков и попросить их, чтобы обеспечить более четкое API ¬¬
Примечание: Все файл читает здесь делается синхронным образом. Это плохо, очень плохо, с точки зрения производительности. Я точно не знаю, что вы собираетесь делать, но я не могу рекомендовать более, что вы нашли способ сделать это асинхр, если это возможно.