1

モジュラーな方法でコーヒーコンパイラに前処理ステップを追加する方法はありますか?

たとえば、アンダースコア関数を使用してすべての配列とオブジェクトの機能を拡張し、次のようなことを実行testArray.first()してコンパイルできるようにしたいとします。_.first(testArray)

Array.prototypeこれは、他のライブラリの配列の機能を拡張する必要があり、機能を壊す可能性があるため、プレーンな JavaScript で行うのは非常に危険です。ただし、coffee-script を使用するのは安全で楽しいようです。

ある方法でこれを行う方法があれば素晴らしいでしょう

  1. モジュラー - 複数の前処理ステップを追加し、さまざまなプロジェクトからプルして、さまざまな方法でプログラミングをより簡単かつエレガントにすることができます
  2. 統合 - カスタム バイナリを使用する必要がないように、coffeescript の構成ファイルで何かを変更し、コーヒー コンパイラを呼び出すすべての開発ツール (ライブ コンパイルなど) でコマンドを置き換えることができるようにしたい.

これはcoffeescriptに組み込まれていますか? そうでない場合は、そうすべきだと思われます。誰も聞いたことがない場合は、開発者に報告します。

4

1 に答える 1

3

CoffeeScript にはプラグイン システムがありません。カスタマイズしたい場合、簡単な方法はありません。CoffeeScript リポジトリをフォークし、必要に応じてコンパイラを変更できます。ただし、これは、メイン リポジトリから定期的に更新を取得して、コンパイラのフォークを維持する必要があることを意味します。

CoffeeScript コンパイラ リポジトリ ( https://github.com/jashkenas/coffeescript/blob/master/lib/coffee-script/coffee-script.js#L195 )の次のコードを参照してください。

....
  o[k] = v;
}
o.bare = true;
js = compile(code, o);
if (sandbox === global) {
  return vm.runInThisContext(js);
} else {
  return vm.runInContext(js, sandbox);
}
....

このファイルに新しいメソッドを追加できます

precompile = function (code) {
    // do pre-processing here
}

そして、作ります

js = compile(precompile(code), o);

私はこれを試みていないので、実行中にいくつかの壁にぶつかる可能性があります。必要な変更は簡単なので、レクサーについて心配する必要はありません。

ただし、任意の言語でこれらの変更を行うための独自のパーサーを作成し、grunt/gulp を使用してコーヒー コンパイルとプリコンパイル ステップを組み合わせることができます。この方法をお勧めします。

于 2015-10-08T09:24:20.257 に答える