以前にrequireを使用していましたが、この問題に遭遇したことはありません。パスがどこかで間違っている可能性がありますが、これは私のファイル構造です:
js
├───main.js
│
├───app
│ ├───app.js
│ ├───hello.js
│ ├───world.js
│ │
│ └───models
│ └───game.js
│
└───vendor
├───jquery.js
└───require.js
main.js
require.config({
paths: {
'jquery': '../js/vendor/jquery'
},
shim: {
'jquery': {
exports: '$'
}
}
});
require(['app/app', 'jquery', 'app/models/game'], function (App, $, Game) {
console.log(arguments);
$(function () {
console.log('why is my App undefined?', App);
App.init();
});
});
アプリ/app.js
define('App', ['hello', 'world'], function (hello, world) {
var App = {};
App.init = function () {
alert(hello + ' ' + world);
};
return App;
});
コードは問題なく起動しますが、依存関係が app または hello または world モジュールで失敗しているように見えます。App は undefined としてログを記録し、ゲーム モジュールも同様です。
app/app は私の App モジュールへの正しいパスである必要がありますか、それとも間違っていると思いますか?
アップデート
App の大文字 A で問題が解決したと思いました (しかし、同時に Jlange のコメントに一喜一憂したので、app/App
からモジュールを起動しましたindex.html
。これは問題ないように見えましたが、開発を続けた後、再び発生しました。
すべてのモジュールを同じディレクトリに問題なくロードできますが、サブディレクトリからモジュールをロードすることはできません。
最初の例のように、アプリ/アプリをメイン モジュール内からロードできなかったため、アプリ/アプリ モジュールはモデル/ゲーム モジュールをインポートできません。
前に言ったように、これが何であるかは文字通りわかりませんが、requirejs を使用してこの問題に遭遇したことはありません。
更新 2 名前付きモジュールをすべてドロップすれば、機能させることができます。
define([dependencies], function (dependencies) {});
それは正常に動作しますが、名前付きモジュールに変更するとすぐに見つかりません
define("moduleA", ['subdir/moduleB'], function (moduleB) {
console.log(moduleB); // >> undefined
});
define("subdir/moduleB", [dependencies], function (dependencies) { return 'B'; });