6

我正在尝试使用 require.js 加载模块,并且我的 app.js 中有以下内容:

require.config({
baseUrl: "js"
});


alert("hello world"); // for debugging

require(['eh2'], function(eh2) {
    alert("nothing here"); // for debugging
});

但是,当我运行我的应用程序时,尽管 app.js 正在加载,但我需要的模块永远不会加载 - “hello world”会执行,但“nothing here”不会!

我在 HTML 页面中的脚本标记如下所示:

<script type="text/javascript" src="js/lib/require.js" data-main="app"></script>

而 eh2.js 位于 js 文件夹中,它被包裹在一个定义语句中:

define(["./screens/Screens"], function(screens) {
    return {
        // code here
    };
});

我究竟做错了什么?require.js 是否在 screen.js 下加载某些子模块时静默失败,也许?

以下是 Screens 模块的代码:

    define([ "screens/TitleScreen", "screens/GameScreen" ], function(titleScreen, gameScreen) {
    return {

        screenFuncs: {
            "TitleScreen" : titleScreen.TitleScreen,
            "GameScreen" : gameScreen.GameScreen,
        },

        buildScreen: function(data) {
            var func = screenFuncs[data.type];
            var screen = new func(data.params);
            return screen;
        },
    };
});

无论如何,define 调用中的路径是否需要相对于我所在的 js 文件的当前位置,或者相对于 app.js 中定义的根?

4

1 回答 1

5

替换这个:

define(["./screens/Screens"], function(screens) {
    ....
});

使用绝对路径变体:

define(["screens/Screens"], function(screens) {
    ....
});

或使用:

define(function(require) {
    var screens = require("./screens/Screens");
    ....
});

文档

define() 中的相对模块名称:

对于可能在 define() 函数调用中发生的 require("./relative/name") 调用,请务必要求将“require”作为依赖项,以便正确解析相对名称:

define(["require", "./relative/name"], function(require) {
    var mod = require("./relative/name");
});

或者更好的是,使用可用于翻译 CommonJS 模块的缩短语法:

define(function(require) {
    var mod = require("./relative/name");
});
于 2012-10-26T02:05:13.260 回答