当我在我的 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
代码
索引.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>
网站.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 的输出。任何人都可以看出它有什么明显的问题吗?