1

我以前一直在使用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'; });
4

1 回答 1

2

已编辑

经过多次尝试,修复了上面的代码,并在 requirejs 帮助页面中阅读,我发现了一个小段落,说最好不要使用命名模块,让优化器为你命名。

所以我决定删除所有模块名称

模块A.js

define(['subdir/moduleB'], function (moduleB) {
    console.log(moduleB); // >> 'B'
});

子目录/moduleB.js

define([dependencies], function (dependencies) { return 'B'; });

这工作得很好......不知道我是如何固定使用这些模块名称的,认为命名你的模块会更好。

于 2013-03-18T23:51:18.547 回答