3

RequireJS を使用してプロジェクト全体を最適化する場合、skipDirOptimize: true の設定を使用すると、メイン モジュールが最適化/醜化されません。私の理解では、非ビルド レイヤーの JS ファイルを除いて、すべてを最適化する必要があります。これはバグですか、それとも私がこのパラメータの正しい使い方を理解していませんか?

これが私のrequirejs構成です:

{
    appDir: '../project',
    mainConfigFile: '../project/assets/js/main.js',
    dir: '../httpdocs',
    optimize: "uglify",
    //Introduced in 2.1.2: If using "dir" for an output directory, normally the
    //optimize setting is used to optimize the build layers (the "modules"
    //section of the config) and any other JS file in the directory. However, if
    //the non-build layer JS files will not be loaded after a build, you can
    //skip the optimization of those files, to speed up builds. Set this value
    //to true if you want to skip optimizing those other non-build layer JS
    //files.
    skipDirOptimize: true,
    generateSourceMaps: false,
    normalizeDirDefines: "skip",
    uglify: {
        toplevel: true,
        ascii_only: true,
        beautify: false,
        max_line_length: 1000,
        defines: {
            DEBUG: ['name', 'false']
        },
        no_mangle: false
    },
    optimizeCss: "standard",
    removeCombined: true,
    modules: [
        {
            name: '../main'
        }
    ]
}
4

1 に答える 1

0

モジュールで相対パスを使用すると、最適化するかどうかを決定する時点で、r.js がそれをビルド バンドルとして認識しない可能性があります。

同様の問題がありました (ビルド バンドルが最適化されていません)。相対モジュール パスではなく、パス構成を使用して、モジュールにフォルダー構造とは異なる名前を付けることができます。

({
    ...
    skipDirOptimize: true,
    paths: {
        'MyLibrary': ''
    },
    modules: [
       { name: 'MyLibrary/Main' }
    ],
    ...
})

これにより、r.js (2.1.8) のモジュール名が になる/Mainため、_buildPathToModuleIndexマッピングを作成すると、スラッシュが 2 つあるためにキーが正しくなくなります (例: C:\dev\project\output\\Main)。

最適化ループがモジュールがビルド バンドルであるかどうか (したがって、 の場合でも最適化が必要skipDirOptimize: true) を決定する方法は、そのファイル名 (例: ) を使用して_buildPathToModuleIndexマッピングで検索することC:\dev\project\output\Mainです。マップ内に 2 つのスラッシュがあるため、見つかりません。したがって、ビルド バンドルとは見なされず、最適化されません。

console.logビルドしてアクセスする r.js にいくつかの s を入れてみて、_buildPathToModuleIndex何を入れているのか、何を使ってそれを調べているのかを確認してください。

'MyLibrary/Main': 'Main'私の問題では、解決策は(残念ながら繰り返し)のパスエントリを追加することでした。あなたのプロジェクト構造が何であるかはわかりませんがbaseUrl: '../、モジュールを設定してから単に呼び出すとどうなりますmainか?

于 2013-08-09T13:10:08.720 に答える