これは少しハッキリですが、うまくいくでしょう。
私はちょうど昨日これについて考えましたが、私はコードをチェックしていました。 bin/typscript.jsをソースコードからチェックすると(21k行程度の非常に大きなファイルです)、TypeScript.TypeScriptCompilerが作成されていることがわかります。この場合、コンパイルの方法が公開されています。
var compiler = new TypeScript.TypeScriptCompiler(outfile, errorfile,
new TypeScript.NullLogger(), settings);
ここでは簡単に公開する必要があります。これを行うには、コードを修正する必要があります。そのため、これはハッキーです。これを行うには、次のようにtypescript.jsを変更することができます。
module.exports = exports = TypeScript;
ファイルの末尾にあります。
次に、モジュールのルートにindex.jsファイルを作成することができます(注意:モジュールをローカルスコープにインストールしてください: "npm install typescript")。オブジェクトを公開します。
exports.TypeScript = require("bin/typescript");
準備完了!今すぐ呼び出すことができ、それを使用してコードをコンパイルします。 tsc.jsファイルのコンパイルにAPIを使用する方法を確認できます。私は先に恐ろしいコードのために、事前に謝罪
:コードを書いた人は誰でも何らかの理由で
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のTypeScriptファイルを翻訳して、それらをすべて1つの.jsファイルに入れたいのであれば、compiler.addUnit(anothercontent、anotherpath)を呼び出すことができます。 500回、それからすべてが単一のファイルに入ります:)
より良いことに焦点を当てます:tsc.jsコードをチェックすると、バッチコンパイラクラスが見つかります。これをビルドプロセスに使用する場合は、そのようなより堅牢なものを使用する方が良いかもしれません。これは、ファイルを監視するなどの機能を提供します。すべてのファイルはここで読み込み、同期方法で行われています。
コードを閲覧したので、私はちょうど開発チームにチケットを提出し、より明確なAPI¬¬
注意を提供するように依頼すると思います。これはパフォーマンス面で悪いですが、非常に悪いです。私はあなたが何をしようとしているのか正確にはわかりませんが、できるだけこれを非同期にする方法を見つけることをさらに勧められませんでした。
優れた答え。あなたの例を楽しみにしています。 – cnp
完了!ファイル名を変更するだけで(test.jsとtest.ts)、それに他のファイル名を付けると動作します。今のところ、エラー出力はprocess.stderrにリリースされますが、あなたはそれを使って何でもできます。また、ハンドラ関数をcompiler.setErrorCallbackとして追加することもできます。これにより、ビルドエラーに関するレポートを作成できます。 – Mamsaac