25

私たちは、Coffeescript を使用してブラウザー (クライアント側のみ) ライブラリを開発したいと考えています。特に、純粋な関数に加えて、Coffeescript の「クラス」機能をかなり使用する傾向があります。ライブラリは比較的大きくなるため、適切に定義されたモジュール パターンを使用して開始したいと考えていますが、すべての coffeescript の "クラス" に対して 1 つのコーヒー ファイルが必要になるわけではありません。コーヒーファイルをオンザフライでコンパイルするのではなく、特定のビルドステップとしてコンパイルしたいので、出力されたすべての JS を 1 つのファイルに連結する必要はありません。最終的な要件として、Jasmine のようなものをテストに使用します。

RequireJS、CurlJS、Browserify などで Coffeescript を使用して、このように開発された良いサンプル ライブラリを知っている人はいますか? 私はGithubを見てきましたが、いくつかの例がありますが、私のニーズに固有のものは何も見られませんでした.

私はCoffee-Toasterを試しました。依存関係などを定義するのを簡単にすることでいくつかの約束を保持しているように見えましたが、Windows パス (古い \ vs /) を処理できなかったので、主にそれが「軽い」面では少し - RequireJS のようなものは、その背後にあるより優れたコミュニティ サポートを持っているように見えます。

ご協力いただきありがとうございます。可能であれば、実際に動作するソース コードの例を探しています。

4

3 に答える 3

37

まず、RequireJS を使用している場合、define 関数から複数の「もの」を返すのは簡単ではありません。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()

「拡張」でも使用できます

define ['my/other/module'], (MyOtherModule) ->
    class MyThirdModule extends MyOtherModule
        ...   

うまくいけば、これが役に立ちます!

于 2012-07-19T18:56:41.577 に答える
3

私もコーヒートースターを使っていますが、最近投稿が少ないです。
これは読む価値があると思いました。

http://blog.toastymofo.net/2012/04/coffeescript-requirejs-and-you-part-one.html
http://24ways.org/2012/think-first-code-later/

そしてhttp://jamjs.orgはかなりクールに思えます!

于 2012-12-07T02:14:13.813 に答える
1

私はまだこのテクニックを実際に使用していませんが、:

ここで覚えておくべき唯一のことは、CoffeeScriptステートメントは関数の最後にあるときの戻り値でもあるということです。したがって、基本的に、次のコード:

define [], () ->
  class Main

次のように変換されます。

define([], function() {
  var Main;
  return Main = (function() {

    function Main() {}

    return Main;

  })();
});

そしてそれは期待通りに機能するはずです(コンパイルされたJavaScriptに基づいていない理由はわかりません)。

コードベースの管理には、CSプラグインが役立つと思います。これはJamesBurke自身によって維持されており、JavaScriptプロジェクトの構築と同じ方法でCoffeeScriptプロジェクトの構築をサポートしています。

于 2012-10-21T17:26:08.070 に答える