我正在使用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获取回复
任何帮助都非常感谢...
答案 0 :(得分:0)
最后修好了。在您的require配置文件中(正如文档中所述,我在上面的回复中提到)只将shim引用放到其他shim模块中。
我从路径中调用了我的脚本,但因为它有依赖关系,所以我将它们放在垫片中,并将它放在那里。
TL:DR;使用路径条目调用主脚本,然后在主脚本列表中定义包装器deps部分中的deps ...