【发布时间】:2013-03-18 20:55:55
【问题描述】:
我之前一直在使用 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/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 的评论采取了行动,所以我从 index.html 启动了 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'; });
【问题讨论】:
-
为什么在 require 语句中包含 jquery?我通常在应用程序文件中定义它,例如
define(['jquery',], function($) -
好吧,我把它放在我的 main 中,因为 main 有一般需要配置,并启动应用程序,这就是为什么它包含 jquery 以在文档就绪状态下启动应用程序。
-
很高兴你让它工作了,我真的很想看到解决方案,因为我经常使用 require.js。
-
好吧,他们不鼓励您命名模块,这让我感到很奇怪,我认为这是一种自然的方式来创建您自己的命名空间,而不会将它与您喜欢的文件夹结构相关联。但我弄错了 :) 我只花了几个小时就弄清楚了,所以我很放心。
标签: requirejs