1

私は Backbone/RequireJS アプリにしばらく取り組んできましたが、現在、Marionette を使用するように更新しています。Marionette AMD が root で jquery、backbone、および underscore を検索しようとすると、最初は壊れます/が、これらのライブラリは に/libあり、コードを変更できます。これを修正する適切な方法は何ですか?(可能であれば、ライブラリを から移動しないで/libください)。

私が今やったことは、動作する非 AMD バージョンを使用することです。ただしCollectionView、一部のビューで未定義のエラーが発生することがあります。これは、RequireJS に AMD 以外のビルドを使用することに関連しているのかどうか疑問に思います。

4

2 に答える 2

2

すべてのライブラリのソース コードを変更して、その依存関係がどこにあるかを伝えることはできません (または、少なくともすべきではありません)。ただし、コードの場所は制御できます。

Volo のデフォルト プロジェクト テンプレートからコピーした私が使用するアプローチは、RequireJSbaseUrl/libフォルダーに設定して、ライブラリ コードがその依存関係を簡単に見つけられるようにし、pathsconfigを使用しコードが存在する場所に「app」をエイリアスすることです。

ディレクトリのレイアウト

/www 
  /js
    main.js
    /lib
      backbone.js
      backbone.marionette.js
      (etc)
    /app
      my-code.js
      view.js

main.js (または RequireJS を構成している場所)

requirejs.config({
    baseUrl: 'www/js/lib',
    paths: {
        app: '../app'
    }
});
// Go on to load another module that contains the actual app. Example:
requirejs(['app/my-code']);

構成内のすべてのパスはpathsbaseUrl. 上記のようにマッピングを定義することは、RequireJS がapp/fooappという名前のモジュールをロードするときに、 (baseUrl)/../app/foo.jsを使用することを意味します。

私のコード.js

define(['backbone', 'app/view'], (Backbone, MyView) {/*...*/}
于 2012-07-17T03:53:38.830 に答える
2

これは一般的な問題であり、私が知っている 2 つの解決策があります。

1) プロジェクトの AMD バージョンの Marionette を変更します。

これら 2 つのライブラリへの正しいパスを指定すれば、準備完了です。これは Marionette の依存関係リストの単純な変更であり、残りの機能には影響しません。

しかし、これは悪い考えです。つまり、コードを変更する必要があり、新しいバージョンを取得するたびに再度変更する必要があります。

2) requirejs で名前付きモジュール/パスを使用する

依存関係を「jquery」、「underscore」、「backbone」の文字列として指定しました。これは、名前付きパスを使用して、これらの依存関係が存在する場所を構成できることを意味します。

これを requirejs 構成に含めます。


require.config({
  paths: {
    "jquery": "/your/path-to/jquery"
  }
});

そして今、「jquery」依存関係はマリオネットによって発見されます

これは、マリオネット ファイルを変更する必要がないため、2 つの解決策のうち優れています。これらの名前付きパスを提供するように RequireJS を構成するだけで済みます。

于 2012-07-17T14:02:28.117 に答える