requirejs无法找到返回未定义的模块

时间:2013-03-18 20:55:55

标签: requirejs

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

1 个答案:

答案 0 :(得分:2)

<强>编辑

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

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

moduleA.js

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

子目录/ moduleB.js

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

这个工作得很好...... 我不知道如何修复使用这些moduleNames,认为最好为你的模块命名。