12

最終的にクライアント側で使用するために結果の JavaScript ファイルを連結する必要がある場合、CoffeeScript ファイル間で依存関係管理を行う最良の方法は何ですか?

サーバー側の CoffeeScript の場合、「require」キーワードを使用して他の JavaScript を要求することができます。これをクライアント側アプリ用にコンパイルすると、require に基づいて依存関係ツリーが作成され、計算され、連結されたスタンドアロンの JavaScript ファイルが生成されます。これを一般的な方法で行う方法はありますか?

4

5 に答える 5

3

もう1つのオプションは、AMD/CJSモジュールパターンの実装とは別のアプローチを使用するCoffeeToasterを使用することです。

ご覧ください: http: //github.com/serpentem/coffee-toaster

于 2012-04-19T16:33:46.693 に答える
2

通常、JavaScript (および CSS) のクライアント側のパッケージ化には、何らかのアセット パッケージ化プラグインが必要です。Jammitを使用しますが、他にも多くのオプションがあります: SprocketsDjango-Compress ... など。

于 2010-11-10T21:55:25.657 に答える
2

Villain (ブラウザー用の CoffeeScript ゲーム エンジン) は、まさにそれを行う関数を定義します (依存関係管理と js 連結)。

そのためのコードは、次の 2 つのファイルにあります。

  • cake.coffeedetermineDependencies()wrapModule()、 および を参照bundleSources()
  • brequire.coffeeは、ブラウザーの代わりに必要であり、一緒に使用しますwrapModule()

ここで使用します( 'bundle'Cake タスクを参照)。

注: モジュールのビルド ディレクトリを宣言するだけで、 Villain'main'はコンパイル済みの JS ファイルをスキャンして依存関係ツリーを構築し ( .index.jsrequire

Villain の作者は、Villain で作成された CoffeeScript ゲームであるoronaで使用しています。

于 2010-12-08T13:21:54.517 に答える
1

クライアント側の依存関係管理には、javascriptとcoffeescriptのソースにrequirejsを使用します。requirejsプラグインを使用してネイティブにコーヒーファイルをロードすることは可能ですが、私はjsに「コンパイル」することを好みます。

requirejsは、 r.jsオプティマイザーも提供/動作します。jsファイルのセットを1つに集約し、それを縮小するために使用できます。集約するファイルを指定する必要はありません。これは、「main.js」に必要な各モジュールの依存関係の定義です。(ご要望に合った機能)

私がrequirejsでとても気に入っているのは、モジュールの作成を「促進」し、明示的な依存関係を宣言することです。

# A.coffee
define(() ->
  class A
    constructor: (@c1, @c2) ->
      @c2 ?= 1

    m1 : () ->
      "hello"

    toString : () -> "#{@c1}#{@c2}"
)


# B.coffee
define(['A'], (A) ->
  a = new A(33)
  console.log(a, a.m1())
)
于 2011-12-02T22:30:48.690 に答える