合并与压缩
下载r.js进行合并与压缩,配置文件build.js的demo:
({
appDir: './', // app顶级目录,非必选项,如果指定相对路径则是相对于build文件所在路径。如果指定值,baseUrl则会以此为相对路径
baseUrl: './assets', //相对于appDir的扫描需要合并压缩文件的锚点,若该值未指定,模块则相对build文件所在目录。
dir: '../assets-built', //指定合并压缩后appDir下的所有文件被复制到此目录,若值未指定,则相对build文件所在目录
mainConfigFile: '../some/path/to/main.js', // 配置文件目录
// 在 RequireJS 2.0.之后,默认输出目录的所有资源会在 build 前被删除
// 值为 true 时 rebuild 更快,但某些特殊情景下可能会出现无法预料的异常
//keepBuildDir: true,
// JS 文件优化方式,目前支持以下几种:
// uglify: (默认) 使用 UglifyJS 来压缩代码
// closure: 使用 Google's Closure Compiler 的简单优化模式
// closure.keepLines: 使用 closure,但保持换行
// none: 不压缩代码
optimize: "uglify",
modules: [ //一个包含多个对象的数组,每个对象代表被优化的模块
{
name: 'config', //需要被优化的模块的入口文件,其所有直接或间接依赖的模块将被合并压缩到一个模块中,可在页面中data-main引入此文件
include: ['other/a'], //需要被一起优化的其他模块的入口文件,其所有直接或间接依赖的模块将被合并压缩到同一个模块中
exclude:['other/b'] //不需要被一起优化到同一个模块的其他模块
},{
name: 'config2'
},{
name: 'main'
}
],
fileExclusionRegExp: /^(r|build)\.js$/, //排除r.js和build.js被复制到指定文件夹
//optimizeCss:优化css文件,目前支持以下几种:
//"standard":标准的压缩方式;
//"standard.keepLines":保留换行;
//"standard.keepComments":保留注释;
//"standard.keepComments.keepLines":保留换行和注释;
//"none":不压缩;
optimizeCss: 'standard',
removeCombined: true, //如果为true则所有被合并压缩的文件将不会复制到目标目录
paths: { // 设置模块别名,如果配置数组,顺序映射,当前面模块资源未成功加载时可顺序加载后续资源
"jquery": 'plugins/jquery-1.10.2.min',
//"jquery": 'empty:',
"bootstrap": 'empty:', //empty:指定不被合并压缩,单独请求
"bootstrap_hover_dropdown": 'empty:',
"jquery_slimscroll": 'empty:',
"jquery_blockui": 'empty:',
"jquery_cookie": 'empty:',
"jquery_uniform": 'empty:',
"jquery_validate" : "plugins/jquery-validation/dist/jquery.validate.min"
},
shim: {
"jquery_validate": ["jquery"]
}
})
//简单版,优化单文件
({
baseUrl: "../js",
name: "app1/c1",
out: "app1-built.js"
})
如果只进行压缩,配置文件build.js的demo:
({
appDir: "assets", //相对于build.js的相对路径
baseUrl: "assets",
dir: "assets-build" ,
optimizeCss: 'standard'
})
r.js依赖于nodejs环境,使用方法:进入文件所在目录,运行node r.js -o build.js