0

アプリ コードからサード パーティのライブラリを分離し、requirejs がプルできるようにそれらをすべて 1 つのファイルvendor.jsbuild.jsグループ化しました。ファイルをmodules最適化しvendor.jsます。私が抱えている唯一の問題は、コンパイルされたmainモジュールが要求するときです。構成ファイルからvendor取得しているbaseUrlため、最適化されたファイルをロードしませんvendor.js。私のbuild.jsファイルは次のようになります。

({
    baseUrl: "js",
    dir: "build",
    mainConfigFile: "js/main.js",
    removeCombined: true,
    findNestedDependencies: true,
    skipDirOptimize: true,
    inlineText: true,
    useStrict: true,
    wrap: true,
    keepBuildDir: false,
    optimize: "uglify2",
    modules: [
        {
            name: "vendor"
        },
        {
            name: "main",
            exclude: ["vendor"]
        }
    ]
})

そして、私のmain.jsファイルは次のようになります。

requirejs.config({
    baseUrl: "js",
    paths: {
        jquery: 'vendor/jquery/jquery-2.1.3.min',
        bootstrap: 'vendor/bootstrap/bootstrap.min',
        handlebars: 'vendor/handlebars/handlebars-v2.0.0',
        backbone: 'vendor/backbone/backbone-min',
        underscore: 'vendor/lodash/lodash.underscore',
        marionette: 'vendor/marionette/backbone.marionette.min',
        models: 'common/models',
        collections: 'common/collections'
    }
});

define(['module', 'vendor'], function(module) {
    var configPath = "config/config." + module.config().env;
    require([configPath, 'app', 'jquery'], function(config, Application, $) {
        $(function() {
            // Kick off the app
            Application.start(config);
        });
    });
});

すべての開発はjsフォルダー内で行われ、私のbuild.jsファイルはそのフォルダーの外にあります。最適化されたファイルはbuild、 の兄弟である になりjsますが、メイン ファイルを次のように含めると、次のようになります。

<script data-main="build/main" src="js/vendor/require/require.max.js"></script>

js/vendor.jsそのdefine()呼び出しの読み込みが終了します。ここで何が欠けていますか?main代わりに最適化されたファイルをロードするように指示し、最適化されbuild/vendor.jsていないバージョンを引き続きロードできるようにするにはどうすればよいjs/vendor.jsですか?

4

1 に答える 1

1

わかりました、私はこれを理解しました。それは単純で、実際には、構成が多すぎる場合にすぎませんでした。を使用してスクリプトをロードするdata-mainと、baseUrl はそのファイルに対して相対的に設定されます。したがって、 を指定した場合js/mainbaseUrlは になりますjsbaseUrlしかし、の構成ブロックで明示的に指定したためmain.js、開発と運用の両方でオーバーライドされます。baseUrl: "js"から削除するとmain.js、すべてが期待どおりに機能します。に変更すると、開発ビルドは に関連するすべてをロードjsし、製品ビルドは に関連するすべて ( vendor.js)をロードします。これがいつか他の誰かに役立つことを願っています。builddata-mainbuild/main

requirejs.config({
    paths: {
        jquery: 'vendor/jquery/jquery-2.1.3.min',
        ...
    }
});

// 'vendor' is loaded relative to whatever directory main.js is in
define(['module', 'vendor'], function(module) {
    ...
});
于 2015-02-12T15:13:18.047 に答える