Javascript RequireJS未捕获错误:不匹配的匿名定义()模块
在一个最小的应用程序中使用带主干的RequireJS,我总能得到Javascript RequireJS未捕获错误:不匹配的匿名定义()模块,javascript,backbone.js,requirejs,Javascript,Backbone.js,Requirejs,在一个最小的应用程序中使用带主干的RequireJS,我总能得到 Uncaught Error: Mismatched anonymous define() module 即使应用程序继续工作。这是: 我在index.html中包括jQuery、下划线和主干,因为我想缩短每个视图/模型中的define()样板 包括 var l = console.log.bind(console) var app //l("AA") require.config({ paths: { //
Uncaught Error: Mismatched anonymous define() module
即使应用程序继续工作。这是:
我在index.html中包括jQuery、下划线和主干,因为我想缩短每个视图/模型中的define()样板
包括
var l = console.log.bind(console)
var app
//l("AA")
require.config({
paths: {
// Major libraries
/*jquery: 'libs/jquery/jquery-min',
underscore: 'libs/underscore/underscore-min', // https://github.com/amdjs
backbone: 'libs/backbone/backbone-min', // https://github.com/amdjs
*/
// Require.js plugins
text: 'text'
}
})
function initApp() {
console.log("BB")
require([
'views/AppView'
], function(AppView){
l("CC")
app = new AppView()
$("#app").html(app.render())
})
}
$(document).ready(initApp)
我无法从文档或回答的问题中找出问题:
多谢各位
我在index.html中包括jQuery、下划线和主干,因为我想缩短每个视图/模型中的define()样板
你不应该。如果你注意到,最上面的链接是到RequireJS的FAQ,解释了这一点
如果您在HTML中手动编写脚本标记,以加载带有匿名define()调用的脚本,则可能会发生此错误
--编辑
如果您使用的是grunt,那么当样板文件过载威胁到您的一天时,您可以使用grunt轻松地基于您自己的自定义模板创建模块:)
免责声明:我编写了Grunt插件。找到了摆脱它的方法:直接使用require(),而不是在ready处理程序中
var l = console.log.bind(console)
var app
//l("AA")
require.config({
paths: {
// Major libraries
/*jquery: 'libs/jquery/jquery-min',
underscore: 'libs/underscore/underscore-min', // https://github.com/amdjs
backbone: 'libs/backbone/backbone-min', // https://github.com/amdjs
*/
// Require.js plugins
text: 'text'
}
})
require([
'views/AppView'
], function(AppView){
l("CC")
app = new AppView()
$("#app").html(app.render())
})
您的代码有很多语法错误,尤其是缺少分号。我真的建议先把它们分类。也许可以取消对jQuery、下划线和主干的路径的注释,因为您的代码依赖于它们被包含,并将它们包含在
AppView
和MyModel
define()
调用中。嗨,Simon,我希望避免在每个视图/模型/集合中定义jQuery、下划线和主干。我不确定您所指的语法错误是什么——添加分号不会消除这个错误。您不需要在每个视图、模型和集合中定义所有这些错误,但您肯定需要在所有这些错误中定义主干。如果您信任JavaScript固有的不可靠的自动分号插入功能,则可以省略分号。但我不知道你为什么要这么做。这是很难追踪的常见bug来源。谢谢Creynders,但我对此不满意。我想要的只是更少的代码,而不是(轻松地)为我生成代码的工具。@user3036808您是否尝试过通过窗口
对象访问它们?即窗口。$
。不过我不推荐。为什么那几行额外的代码会让你如此烦恼。我想要尽可能少的样板。2.该解决方案不适用于处理jQuery插件。请将以下内容与之进行比较:`define(['jQuery',下划线,'backline','models/MyModel','text!templates/mainTemplate.html',function($,33;,backbone,MyModel,mainTemplate){`define(['models/MyModel','text!templates/mainTemplate.html',function](MyModel,mainTemplate){“恐怕没有其他选项了。Argh…错误仍然出现在约30%的案例中,显然是随机出现的。找到了问题并将其永久修复:在require.js之前必须包含less.js。在require.js之前包含less.js不是“正确的解决方案”-即使用requirejs.config()
处理less.js,必要时可能使用垫片。