2

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

http://pastebin.com/Rbm7J83X

4

1 に答える 1

0

jQueryをインライン化したところ、正常に機能しているようです。( requirejs.orgのAPI shimドキュメントの下部に記載されていますが、Optimizeセクションのどこにも記載されていません。)

これが正しい修正であるかどうかはわかりませんが、うまくいけば他の誰かに役立つでしょう。

于 2012-11-12T09:04:39.573 に答える