次のディレクトリ構造と次のファイルがあるとします。
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() の設計上の違いはなぜですか?