私たちは、Coffeescriptを使用してブラウザ(クライアント側のみ)ライブラリを開発したいと考えています。特に、純粋な関数に加えて、Coffeescriptの「クラス」機能をかなり使用する傾向があります。ライブラリは比較的大きくなるため、明確に定義されたモジュールパターンを使用することから始めたいと思いますが、コーヒースクリプトの「クラス」ごとに1つのコーヒーファイルが必要になるほどではありません。コーヒーファイルをその場でコンパイルするのではなく、特定のビルドステップとして、出力されたすべてのJSを1つのファイルに連結する必要がないことを望みます。最後の要件として、テストにはJasmineのようなものを使用します。
この方法で開発された、RequireJS、CurlJS、BrowserifyなどのCoffeescriptを使用して良いサンプルライブラリを知っている人はいますか? Githubを調べたところ、いくつかの例がありますが、自分のニーズに固有のものは見つかりませんでした。
Coffee-Toaster を試しましたが、依存関係などを簡単に定義できる可能性があるため、Windowsパス(古い\ vs /)を処理できなかったため、あきらめました、主にそれが少し「軽い」側にあるように見えたためです-RequireJSのようなものは、その背後にあるはるかに優れたコミュニティサポートを持っているようです。
あなたが提供できるどんな助けにも感謝します。可能であれば、実用的なソースコードの例を本当に探しています。
まず、RequireJSを使用している場合、定義関数から複数の「もの」を返すのは簡単ではありません。 RequireJSは、AMD(!NOT!CommonJS)形式の「標準」を使用します。これには「もの」をエクスポートするためのmodule.exportsオブジェクトは含まれていませんが、代わりに何かを返すことに依存しています。
そうは言っても、ここで何を探しているのか正確にはわかりませんが、RequireJSでクラスを動作させるのは非常に簡単です。このようなもの:
define ['my/required/module'], (myModule) ->
class MyOtherModule
privateField = 0
constructor: ->
publicMethod: ->
return MyOtherModule
これは、他のスクリプトと同様に、require/define関数で使用できます。この例を見てください:
require ['my/other/module'], (MyOtherModule) ->
instance = new MyOtherModule()
「extends」でも使用できます
define ['my/other/module'], (MyOtherModule) ->
class MyThirdModule extends MyOtherModule
...
うまくいけば、これが役立ちます!
私もコーヒートースターを使っていますが、最近投稿がほとんどありません。
それは読む価値があると思いました。
http://blog.toastymofo.net/2012/04/coffeescript-requirejs-and-you-part-one.html
http://24ways.org/2012/think-first-code-later/
そして http://jamjs.org かなりクールなようです!
私はまだ実際にこのテクニックを使用していませんが、:
ここで覚えておくべき唯一のことは、CoffeeScriptステートメントは関数の最後にあるときの戻り値でもあるということです。したがって、基本的に、次のコード:
define [], () ->
class Main
に変換します:
define([], function() {
var Main;
return Main = (function() {
function Main() {}
return Main;
})();
});
そして、それは期待どおりに動作するはずです(コンパイルされたJavaScriptに基づいていない理由はわかりません)。
コードベースを管理するには、 CSプラグイン が便利だと思います。これはJamesBurke自身によって維持されており、JavaScriptプロジェクトの構築と同じ方法でCoffeeScriptプロジェクトの構築をサポートしています。