coffeeの特にクラス記法などを多用していると、coffeeを辞めたい際にES5へのコンパイルしてから再出発しようとすると、多くの情報が欠損してしまう。なので decaf を使う。
decaf は coffee を ES.next へ書き換えるトランスパイラ。
Issueをみるとわかるが(僕も3件ぐらいバグ報告してるのだが)、完全に動くコードに置き換えることはできない。実際には、変換できるまで何度か手を加えながら試して、変換できたら、今度は実際に動くかまた試して… というステップを踏むことになる。面倒だが、自分でゼロからやるよりはマシだ。
使い方
いれる。
npm install glob decafjs --save-dev;
こんなスクリプトを書いて一気に変換した。
var glob = require("glob");
var decaf = require("decafjs");
var fs = require("fs");
var path = require("path");
glob.sync("src/**/*.coffee").forEach(_path => {
var coffeeSrc = fs.readFileSync(_path).toString();
try {
var js = decaf.compile(coffeeSrc);
fs.writeFileSync(_path.replace(".coffee", ".js"), js);
fs.unlinkSync(_path)
} catch(e) {
console.log("fail:", _path)
}
});
あと生成されるメンバが Stage 1 の class property じゃないと動かなかったりするので、http://babeljs.io/docs/plugins/transform-class-properties/ をbabel に入れたりした。typescript は型足せばそのまま動くと思う。