5

次のディレクトリ構造と次のファイルがあるとします。

root
|-- require-jquery.js
+-- folder
     |-- index.html
     |-- main.js
     +-- AnotherModule.js

RequireJS では、"." で始まるモジュールを参照すると、RequireJS は現在のモジュールが存在するフォルダーと同じフォルダー (サブディレクトリであっても) を検索します。ただし、define() を呼び出す直前に baseUrl を変更すると、RequireJS は依存関係を新しい baseUrl にマップします。

これを修正するには、index.html で baseUrl を設定し、data-main を baseUrl からの相対パスに変更します。

フォルダ/index.html:

<script>
    var require = {
        baseUrl : "../"
    };
</script>
<script data-main="folder/main" src="../require-jquery.js"></script>

フォルダー/main.js:

define(
        [ "jquery", './AnotherModule' ],
        function($, AnotherModule) {});

ただし、これは define() でのみ機能します。

フォルダー/main.js:

require(
        [ "jquery", './AnotherModule' ],
        function($, AnotherModule) {});

require() で試してみると、RequireJS はフォルダーではなくルートで AnotherModule.js を探します。これはなぜですか? 特に、define() と require() の設計上の違いはなぜですか?

4

1 に答える 1

8

これは、define がモジュール名を指定し、require が指定しないためです。

define は次のように呼び出すことができます:

define('folder/main',
        [ "jquery", './AnotherModule' ],
        function($, AnotherModule) {});

最初のパラメーターはモジュール名 (モジュールへの明示的なパス) です。Define() は常に暗黙的にパスを指定します。一般に、明示的なパスを使用することはお勧めしません。Require は name パラメータを取りません。

define() に ('./AnotherModule' のように) 相対的な依存関係を含めると、モジュール名に対して相対的に検出されます。この場合、./AnotherModule は folder/AnotherModule に解決されます。

require() の呼び出しでは、モジュール名はありません。相対的な依存関係はルートに解決されます。

于 2013-04-24T15:44:37.797 に答える