【发布时间】:2012-11-02 13:34:19
【问题描述】:
当我在我的 Backbone.js 应用程序上运行 r.js 优化器时,我收到此错误:
Uncaught TypeError: undefined is not a function
它出现在输出的 Backbone.js 部分的中间。
我删除了一些代码,直到我发现是什么原因造成的,这似乎是我打电话给Backbone.history.start();的时候。
我创建了一个简单的应用程序来复制我在下面发布的错误。基本上,它创建了一个路由和“console.log”的“家”。未优化时效果很好。
为了优化应用,我使用:
node r.js -o app.build.js
来自 /js 文件夹。
我有 Backbone.js 0.9.2、RequireJS 2.1.1、r.js 2.1.1
以前有人遇到过这种情况吗?我对 Backbone.js/RequireJS 还是很陌生,所以希望这只是我做错了一些愚蠢的事情。
文件夹结构
/js
/libs
- backbone.js
- require.js
- underscore.js
- app.build.js
- r.js
- site.js
index.html
代码
index.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script data-main="/js/site.js" src="/js/libs/require.js"></script>
</body>
</html>
site.js
requirejs.config({
baseUrl : 'js/',
paths : {
jquery : '//ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min',
backbone : 'libs/backbone',
underscore : 'libs/underscore'
},
shim : {
backbone : {
deps : ['underscore', 'jquery'],
exports : 'Backbone'
},
underscore : {
exports : '_'
}
}
});
require(['jquery', 'backbone'], function($, Backbone) {
var Router = Backbone.Router.extend({
routes : {
'' : 'home'
},
home : function(){
console.log('home');
}
}),
appRouter;
$(function() {
appRouter = new Router();
Backbone.history.start();
});
});
app.build.js
({
baseUrl: ".",
name: 'site',
paths: {
jquery: 'empty:',
underscore: 'libs/underscore',
backbone: 'libs/backbone'
},
out: 'site-built.js',
shim : {
backbone : {
deps : ['underscore', 'jquery'],
exports : 'Backbone'
},
underscore : {
exports : '_'
}
}
})
谢谢!
更新
这是 site-built.js 的输出。有人能看出它有什么明显的问题吗?
【问题讨论】:
-
我知道这对您没有帮助,但是使用您提供的代码对我来说效果很好:s
-
干杯,那一定是我的电脑特有的东西。我会在另一台机器上试一试,看看会发生什么。
-
我已经有了一些优化器的 WTF,如果我没记错的话,它是行尾的一个不可见字符。手动重新键入该行,修复之前的一行和修复后的一行。
-
我有 sublime 可以去掉所有尾随空格,所以不应该有任何隐藏字符。我移动了一些线条,但没有快乐。我刚刚用优化文件的输出更新了问题。
标签: backbone.js requirejs r.js