如果我使用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'
}
]
}
答案 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'
怎么样?