RequireJS - skipDirOptimize:true设置不优化我的主模块

时间:2013-02-25 12:52:27

标签: javascript requirejs uglifyjs

如果我使用RequireJS来优化我的整个项目,如果我使用skipDirOptimize:true设置,我的主模块将不会被优化/ uglified。根据我的理解,除了非构建层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'
        }
    ]
}

1 个答案:

答案 0 :(得分:0)

在模块中使用相对路径可能会导致r.js在决定是否对其进行优化时不会将其识别为构建包。

我遇到了类似的问题(构建包没有被优化),没有相对模块路径,但是路径配置允许我的模块以不同的方式命名为我的文件夹结构:

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

这导致r.js(2.1.8)中的模块名称变为/Main,因此当它构建其_buildPathToModuleIndex映射时,由于有两个斜杠(例如{ {1}})。

优化循环决定模块是否为构建包(因此即使在C:\dev\project\output\\Main时也需要优化)的方式是使用其文件名在skipDirOptimize: true映射中查找(例如{{ 1}})。由于它在地图中有两个斜线,因此无法找到它。因此,它不会被视为构建包,也不会被优化。

尝试在r.js中放置一些_buildPathToModuleIndex,然后访问C:\dev\project\output\Main以查看它的内容以及用于查找内容的内容。

对于我的问题,解决方案是为console.log添加路径条目(遗憾的是重复)。我不确定您的项目结构是什么,但是如果您设置_buildPathToModuleIndex然后只是调用模块'MyLibrary/Main': 'Main'怎么样?