0

プロジェクトにrequirejsを使用していて、2つのモジュールがあります。

  • a.js:コードに触れることができない非AMDモジュールです
  • b.js:私がdefine()関数で書いたAMDモジュールです。動作する必要がありa.jsます。
  • app.js:との両方を使用する実際のアプリケーションコードa.jsですb.js

app.jsは次のようになります。

//source code for app.js
require(['a.js', 'b.js'],
function( a, b ) {
    a.x = 2;//this will fail because 'a' is not defined
});

require()ここで問題は、両方のモジュールを使用する最も簡単な方法は何app.jsですか?私はそれを次のように行うことはできません:

//source code for app.js
require(['b.js', 'a.js'],
function( b ) {
    a.x = 2;//it works because module 'a' defines a global variable named 'a'
    b.x = 2;//this will fail because module 'b' is loaded before 'a' so it doesn't work
});
4

2 に答える 2

2

あなたが言うように、a.jsは というグローバル変数をエクスポートするため、 shim config オプションを使用して AMD の方法で公開するようにa構成できます。を必要とするモジュールは、それが適切なモジュールではないことさえ知りません。あなたの場合、構成は次のようになります。RequireJSa.js

requirejs.config({
    shim: {
        'a.js': {
            exports: 'a' // a.js defines 'window.a'
        }
    }
});
于 2013-03-16T11:59:29.187 に答える
0

これは、AMD ローダーの標準料金です。ほとんどの場合、シムは必要ありません。app.js のソースは正しいですが、b.js のソースを表示していません。b.js を制御できるため、a.js に依存する AMD モジュールとして記述する必要があります。

// source code for b.js
// You have to use define, not require, and the dependency on a.js must be here rather than via a nested or internal require
define(['a.js'], function(a){
    // your code for b.js
});

これにより、app.js の実行準備が整ったときに、a.js が b.js の前にロードされるようになります。

于 2013-04-15T17:43:59.350 に答える