我以前一直在使用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 日志为未定义,我的游戏模块也是如此。
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'; });