LoginSignup
36
31

More than 5 years have passed since last update.

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

Posted at

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 は型足せばそのまま動くと思う。

36
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
31