Bu seferki biraz hacky ama çalışacaktır.
Bu aynı dün düşündü ve onların kod kontrol ediyordu. Onların Sourcecode gelen bin / typscript.js kontrol ederseniz, o TypeScript.TypeScriptCompiler oluşturur göreceksiniz ve sonra bu derleme bir yolunu maruz ETMEZ olduğunu göreceksiniz (Bu kod neredeyse 21k çizgilerle, çok çok büyük bir dosyadır) .
var compiler = new TypeScript.TypeScriptCompiler(outfile, errorfile,
new TypeScript.NullLogger(), settings);
Şimdi, bunu açığa çıkarmak için kolay bir yol gerekir. Bunu yapmak için, bu hacky neden olduğu kodlarını değiştirmek zorunda kalacaktır. Bunu yapmak için, ekleyerek typescript.js değiştirebilir:
module.exports = exports = TypeScript;
Sağ dosyanın sonuna.
(Haber: tüm bu yerel kapsamda modülü yükleyin: "npm typescript yükle") Daha sonra, modül kök bir index.js dosyası oluşturabilir, nesneyi arzeder.
exports.TypeScript = require("bin/typescript");
Ve hazır! Şimdi sadece diyoruz ve bunu kullanarak kodunuzu derlemek. Sen tsc.js dosyasında derleme için API nasıl kullanılacağını kontrol edebilirsiniz.
İleride korkunç kodu için şimdiden özür dileriz:
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();
kodunu kim yazdıysa nedense C # gerçek bir hayranıydım ve önde gitmek için ilerledi ve kullanım yöntemleri aslında sadece sargı olan, hangi WriteLine'ı Yakın ve yaz denilen için. Bu işlevler eklemek zorunda yükü bu alabilir, ancak modülünde kod çok değiştirmek zorunda kalacak ve buna değer değildir. Bunun uzatmak için bir sınıf için en iyi olduğunu düşünüyorum (veya JS hala eğer, prototip miras) ve buna KURU yapmak, sizin için yapalım.
gerçekten güzel bir şey mi 500 typescript dosyaları çevirmek ve tek .js dosyası içine hepsini koymak istiyorsanız, sadece compiler.addUnit (anothercontent, anotherpath) çağırabilir olmasıdır; Daha sonra 500 kez ve tüm görmek tek bir dosya haline gitmek :)
daha iyi şeyler üzerinde yoğunlaşırken: Eğer tsc.js kodunu kontrol ederseniz, bir toplu derleyici sınıf bulacaksınız. Eğer bir yapı süreci için bu isterseniz, öyle daha sağlam bir şey kullanmak daha iyi olabilir. Bu izliyor dosyaları ve daha sağlar.
kodunu göz olması, ben sadece geliştirme ekibine bir ticket ve daha net bir API sağlamak için onlara sormak düşünüyorum ¬¬
Not: Tüm dosya burada okuyan bir senkron bir şekilde yapılır. Bu performans açısından çok kötü, kötü. Ne yapmayı planlıyorsunuz tam olarak ne olduğunu bilmiyorum, ama mümkünse bu uyumsuz hale getirmek için bir yol bulmak olduğunu daha tavsiye olamazdı.