4

バックボーン アプリは最適化前に正常に動作します。r.js (アーモンドを使用) を使用した後、バックボーンの直後のモジュールで常に「TypeError: バックボーンは未定義」エラーをスローするように見える単一の出力ファイルを正常に生成します。

たとえば、r.js からの出力は次のようになります。

/consumer/public/javascripts/vendor/almond.js
/consumer/public/javascripts/vendor/jquery-1.7.2.js
/consumer/public/javascripts/vendor/underscore.js
/consumer/public/javascripts/vendor/bootstrap.js
/consumer/public/javascripts/vendor/backbone.js
/consumer/public/javascripts/rjs/src/mnp/prop_m.js
/consumer/public/javascripts/rjs/src/mnp/prop_c.js
/consumer/public/javascripts/vendor/play-mustache.js
...
/consumer/public/javascripts/main.js

ブラウザで最適化されたファイルをロードすると、バックボーンを参照するときに「prop_m.js」モジュールで上記のエラーがスローされます。require 2.0.5、Backbone 0.9.2、almond 0.1.4 を使用。助けてくれてありがとう。

PS: build.js は次のようになります。

    ({
    baseUrl:   "./",
    mainConfigFile: "main.js",
    paths: {
    'almond': 'vendor/almond',

        // need a path to the cs-compiled .js file
        'app' : '../../target/scala-2.9.1/resource_managed/main/public/javascripts/rjs/src/app',
        'mnp/router' : '../../target/scala-2.9.1/resource_managed/main/public/javascripts/rjs/src/mnp/router',
        'mnp/search_form_v' : '../../target/scala-2.9.1/resource_managed/main/public/javascripts/rjs/src/mnp/search_form_v',
        'mnp/prop_c' : '../../target/scala-2.9.1/resource_managed/main/public/javascripts/rjs/src/mnp/prop_c',
        'mnp/prop_m' : '../../target/scala-2.9.1/resource_managed/main/public/javascripts/rjs/src/mnp/prop_m',
        'mnp/prop_list_v' : '../../target/scala-2.9.1/resource_managed/main/public/javascripts/rjs/src/mnp/prop_list_v',
        'mnp/prop_item_v' : '../../target/scala-2.9.1/resource_managed/main/public/javascripts/rjs/src/mnp/prop_item_v'
    },


    /*not compatible with modules*/
    name: 'vendor/almond',
    include: ["main"],

    out: "dist/app.js",
    /*not compatible with modules*/

    keepBuildDir: false,

    preserveLicenseComments: false,
    optimize: "none", 
    wrap: {
        start: "(function(global, define) {\n"+
           // check for amd loader on global namespace
            "  var globalDefine = global.define;\n",

        end:   "  var library = require('main');\n"+
            "  if(typeof module !== 'undefined' && module.exports) {\n"+
            // export library for node
            "    module.exports = library;\n"+
            "  } else if(globalDefine) {\n"+
            // define library for global amd loader that is already present
            "    (function (define) {\n"+
            "      define(function () { return library; });\n"+
            "    }(globalDefine));\n"+
            "  } else {\n"+
            // define library on global namespace for inline script loading
            "    global['main'] = library;\n"+
            "  }\n"+
            "}(this));\n"
    }


})`
4

3 に答える 3

2

FWIW: 誰かがこの問題に遭遇した場合... amd バージョンのバックボーンとアンダースコアを使用すると、問題が解決するようです。すなわち。amd-versions は機能し、shim は機能しませんでした

RequireJS を使用してバックボーンとアンダースコアを読み込む

于 2012-09-24T19:28:04.597 に答える
1

を含めるのを忘れたときに、この問題が発生しましたshimmainConfigFileたとえば、ここに示すように、ビルド構成で自分のmain.jsファイルに設定することで解決しました: https://github.com/jrburke/r.js/blob/master/build/example.build.js

于 2012-09-28T22:08:15.333 に答える
0

inlineText: trueバックボーンがコンパイル済み.jsファイルにあることを確認するために使用することができます

さらに、パスを格納している 2 つのオブジェクトに目を光らせないようにするために、次のようなことをお勧めしますmainConfigFile: "main.js"- 魅力のように機能します ;) 編集: なぜmainConfigFileオプションパスを設定するのですか?

于 2012-09-23T07:15:11.267 に答える