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 の出力です。誰かが明らかに間違っていることを見ることができますか?