decaf

decafでcoffeeのコードをES.next に書き換える

More than 3 years have passed since last update.

coffeeの特にクラス記法などを多用していると、coffeeを辞めたい際にES5へのコンパイルしてから再出発しようとすると、多くの情報が欠損してしまう。なので decaf を使う。

https://github.com/juliankrispel/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 は型足せばそのまま動くと思う。