Uglified定义不定义

时间:2014-08-24 15:17:13

标签: javascript requirejs r.js

我正在使用r.js来uglify并连接我的js文件。一些函数出现在uglified文件中,就像这样(NB。为了便于阅读,它被美化了):

!function(root, factory) {
if ("object" == typeof exports) {
    {
        var backbone = require("backbone");
        require("marionette");
    }
    dust = require("dust");
    module.exports = factory(backbone, dust);
} else if ("function" == typeof define && define.amd) {
    define("marionette-dust", [ "backbone", "dust", "marionette" ], factory);
    console.log(requirejs.s.contexts._.config);
}
}(this, function(Backbone, dust) {
    alert("in");
    Backbone.Marionette.Renderer.render = function(template, data) {
        console.log("BBD: ", arguments);
        var html;
        console.log("dust: ", dust);
        dust.render(template, data, function(err, out) {
            console.log("out", out);
            html = out;
        });
        return html;
    };
    console.log("Backbone", Backbone);
});

如果我加载页面然后测试:

require.defined("marionette-dust")

然后它会在没有加载时返回。如果我把断点放进去,那么基本上它会进入amd部分(else-if块)并且define存在,但它没有定义,工厂部分永远不会被执行......

要清楚:第一个控制台日志显示requirejs对象(没有加载模块);没有其他人被执行,因为他们在工厂函数...我已经在它工作了几个小时现在我认为这与在r.js中转换的包装器有关.dequire.defined是我的东西之后输入我自己来测试模块是否已被定义 - 它返回false ...

如果您想更仔细地查看,可以在https://github.com/jmsherry/birds2获取回复

任何帮助都非常感谢...

1 个答案:

答案 0 :(得分:0)

最后修好了。在您的require配置文件中(正如文档中所述,我在上面的回复中提到)只将shim引用放到其他shim模块中。

我从路径中调用了我的脚本,但因为它有依赖关系,所以我将它们放在垫片中,并将它放在那里。

TL:DR;使用路径条目调用主脚本,然后在主脚本列表中定义包装器deps部分中的deps ...