1

RequireJS オプティマイザーは、定義された依存関係を調べて、アプリケーション内の参照されているすべての js ファイルを収集し、それらを 1 つの大きな js ファイルにバンドルするという印象を受けました。

その後、html スクリプト インクルードでその単一のファイルを参照できます。

しかし、そうではないようです。これを実行すると、大きなファイルが得られますが、ディレクトリ構造内のファイルへのパスを含む元の main.js ファイルが含まれています。

そのポイントは何ですか?必要なものがすべて内部に含まれているのに、新しい大きなファイルに外部のパスが含まれているのはなぜですか? オプティマイザーが「./」などを指すようにパスを書き換えるようです。

アプリ全体をまとめてページで参照すると、大きな js ファイルに含まれているファイルが見つからないというエラーが表示されます。

Uncaught object                                                     require.js:70
GET http://localhost/ui/js/modules/mod_limeLight.js 404 (Not Found) require.js:729
Uncaught Error: Script error for: mod_limelight
http://requirejs.org/docs/errors.html#scripterror 

build.js:

({
    baseUrl: "./src/ui/scripts",
    name: "main",
    mainConfigFile : "src/ui/scripts/main.js",
    out: "dist/ui/scripts/main-built.js"
})

main.js

'use strict';
require.config({
    "paths": {
        "jquery":               "libs/jquery-1.11.0.min",
        "twitter_bootstrap":    "../bower_components/bootstrap/dist/js/bootstrap.min",
        "respondjs":            "../bower_components/respond/dest/respond.min",
        "debouncejs":           "libs/dw-debounce",
        "carousel":             "libs/jquery.carouFredSel-6.2.1-packed",
        "swipe":                "libs/jquery.touchSwipe.min",

        "app":                  "app",
        "OOo_config":           'libs/oo_conf_entry-ck', // Opinion Lab pop-up

        //modules
        "addthis":              "//s7.addthis.com/js/300/addthis_widget",
        "mod_addThis":          "modules/mod_AddThis",
        "limelight":            "//assets.delvenetworks.com/player/embed",
        "mod_limelight":        "modules/mod_limeLight"
    },
    "shim": {
        "twitter_bootstrap": ["jquery"],
        "carousel": ["jquery"],
        "swipe": ["jquery"],
        "packeryjs": ["jquery"]
    }
});

require([
    "jquery",
    "app",
    "OOo_config",
    "respondjs",
    "mod_addThis",
    "mod_limelight"
], function ($, app) {

    app.init();

});

サンプル モジュールは次のように始まります。

define([
    "jquery", "debouncejs", "limelight"
],
function ($) {
    'use strict';

    var playerElement = ...
});

次に実行します:

node r.js -o build.js

私は何が欠けていますか?その大きな js ファイルに含まれるファイルを取得しようとするのはなぜですか?

ありがとう、スコット

4

1 に答える 1

1

通常のパスを使用して含まれるモジュールを識別します。これは単純で明確であり、機能するためです。もちろん、ファイルは取得されません。

于 2014-06-04T03:43:17.887 に答える