我以前一直在使用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模块的正确路径,还是我认为错了?
更新
我认为应用程序的首都A解决了这个问题(但同时我对Jlange的评论进行了评论,所以我从app/App
启动了index.html
模块。这似乎没问题,但在继续开发之后,又出现了。
我可以很好地加载同一目录中的每个模块,但我不能从子目录中加载模块。
像初始示例无法从主模块中加载app / App,app / App模块也无法导入模型/游戏模块。我完全不知道这可能是什么,正如我之前所说,我使用过requirejs并且没有遇到过这个问题。
更新2 如果我删除所有已命名的模块,我可以使它工作,
define([dependencies], function (dependencies) {});
工作正常 但是一旦我把它改成一个命名的模块,我找不到它
define("moduleA", ['subdir/moduleB'], function (moduleB) {
console.log(moduleB); // >> undefined
});
define("subdir/moduleB", [dependencies], function (dependencies) { return 'B'; });
答案 0 :(得分:2)
<强>编辑强>
经过多次尝试,修复上面的代码,并在requirejs帮助页面中阅读,我发现了一个小段落,说最好不要使用命名模块,让优化器为你命名。
所以我决定删除所有模块名称
moduleA.js
define(['subdir/moduleB'], function (moduleB) {
console.log(moduleB); // >> 'B'
});
子目录/ moduleB.js
define([dependencies], function (dependencies) { return 'B'; });
这个工作得很好...... 我不知道如何修复使用这些moduleNames,认为最好为你的模块命名。