在requirejs中没有循环deps的“模块加载没有完成”

时间:2015-04-25 08:04:18

标签: gruntjs requirejs r.js

[edit]我把问题缩小到lib three.js。应用程序确实有效,r.js优化器无法正常工作,当我在require需要进程中删除对three.js的所有引用时,r.js会进行编译(但是应用程序不再工作了)

我只是评论那些我将lib引用为dep的垫片。那些库仍然是必需的,所以它们不是问题。这是render/three有问题的。但是我现在不明白为什么

   "render/OrbitControls": ["render/three"],
    "render/TrackballControls": ["render/three"],
    "render/Detector": ["render/three"],
    "render/stats.min": ["render/three"],
    "render/threex.rendererstats": ["render/three"],
    "render/ColladaLoader": ["render/three"],
    "render/Projector": ["render/three"],

[原创] 我在我的requirejs项目中手动和使用Madge加倍检查了圆形deps。

然而,即使采取了这些预防措施,r.js仍然告诉我它无法完成模块加载。我有点卡在这里

以下是控制台中发生的事情的屏幕。

enter image description here

这是我在grunt中的r.js配置

    requirejs: {
            compile: {
                options: {
                    name:           "engine",
                    baseUrl:        "./src/GuildEngine/",
                    mainConfigFile: "./src/GuildEngine/engine.js",
                    out:            "./build/www/data/curry.min.js",
                    optimize:       "uglify2",

                    preserveLicenseComments: false,
                    generateSourceMaps:      true,
                    findNestedDependencies:  true,

                    uglify2: {
                        sourceRoot: "../../src/GuildEngine",
                        mangle:     {
                            toplevel:  true,
                            screw_ie8: true
                        },
                        wrap:       "",
                        compress:   {
                            sequences:    true,
                            dead_code:    true,
                            conditionals: true,
                            booleans:     true,
                            unused:       true,
                            if_return:    true,
                            join_vars:    true,
                            //drop_console: true
                        }
                    }
                }
            }
        }

1 个答案:

答案 0 :(得分:2)

通过在shim配置中有效删除对three.js的依赖关系来解决此问题。什么有效是添加一个包含其他库的require调用的require调用。这是我找到r.js和我的应用程序的唯一方法。

这个: require(["render/three"], function(){ require(["render/ColladaLoader"], function(){ ... }); });

代替: "render/ColladaLoader": ["render/three"]和:require(["render/ColladaLoader"], function(){ ... });