2

requirejs を使用すると、同じモジュールに依存する 2 つのファイルがあります。両方の依存関係で常に同じモジュール名を使用していることを確認する必要がありますか? たとえば、require.config のパスを定義した場合:

'myMod':'src/js/myModule'

そして、次のように、名前を 1 回使用し、実際のパスを 1 回使用します。

//in a.js
define(function(require){
 var mod = require('myMod');
});

//in b.js
define(function(require){
 var mod = require('src/js/myModule');
});

明らかに、ベストプラクティスはモジュール名をどこでも使用することですが、これが実際のエラーを引き起こす理由を知りたいです。

requirejs は、使用されるモジュール名と実際にロードされたモジュールの間のマップを保存しますか?

4

1 に答える 1

4

あなた自身が言うように:

明らかに、ベスト プラクティスはモジュール名をあらゆる場所で使用することです。

RequireJS は、このプラクティスをある程度まで強制します。問題は、名前で RequireJSをロードすることを事実上言っていることをpathsRequireJSに伝えることです。おそらく、フルパスで参照すると、これはあなたのエラーです。これが私のコードで発生した場合、エラーと見なします。したがって、これが発生したときに RequireJS が失敗することを望みます。'myMod':'src/js/myModule'src/js/myModulemyMod

セマンティクスの問題もあります。基本的なケースでは、2 つの名前がrequire異なるものに渡された場合、相対パスが解決されると、それらは 2 つの異なるモジュールを参照します。2 つの異なるモジュールを期待している場合はrequire('myMod')、これで完了です。と を実行すると、同じモジュールが得られます。では、あなたが設定したもので、実際に何が欲しいのでしょうか? 同じモジュールですか、それとも異なるモジュールですか?require('src/js/myModule')require('myMod')require('myMod')paths

RequireJS には、両方を提供する方法があります。両方のモジュール名で同じモジュールを取得したい場合は、構成を削除して、代わりにpaths構成を使用します。map

map: {
  '*': {
    myMod: 'src/js/myModule'
  }
}

これが意味することは、「すべてのモジュール ( *) で、モジュールに対して要求が行われた場合、代わりにmyModモジュールをロードする」ということです。src/js/myModule意図は非常に明確です。

同じソースを共有しているにもかかわらず、両方のパスで別のモジュールを提供したい場合は、モジュールに同じソースをロードする RequireJS プラグインを使用してそれを行うことができますが、RequireJS はこの単一のソースを別のモジュールとして登録します。

于 2015-01-03T13:52:03.500 に答える