grunt-combohtml
HTML代码的构建,合并SSI,并提取其中引用的本地css和js,执行动态和静态合并,并输出构建好的html
Getting Started
依赖 Grunt 版本~0.4.1
安装
npm install grunt-combohtml --save-dev
安装后,在Gruntfile.js中载入任务
grunt.loadNpmTasks('grunt-combohtml');
任务配置
步骤
在grunt.initConfig()
中添加combohtml的配置:
grunt.initConfig({
combohtml:{
options:{
encoding:'utf8',
replacement:{
from:/src\//,
to:'build/'
},
relative:'http://g.tbcdn.cn/path/to/project/',
combineAssets: true,
comboMapFile:'http://g.tbcdn.cn/path/to/maps.js',
tidy:false,
mockFilter:true,
comboJS:false,
comboCSS:false,
convert2vm:false,
convert2php:false,
comboExt:'-combo',
htmlProxy: '<%= pkg.htmlProxy %>',
htmlProxyDestDir: 'html-fragments'
},
main:{
files: [
{
expand: true,
cwd:'build',
src: ['**/*.php'],
dest: 'build/'
}
]
}
}
});
说明:relative和comboJS与comboCSS的配置互斥
其中 htmlProxy
的配置在 abc.json
中指定,这里读取配置,示例配置如下:
...
,
"htmlProxy": [{
"urlReg": "http://tiehang.demo.taobao.net/ksdemo/html-proxy.html",
"replacements": [{
"fragment": "mods/demo/index.html",
"selector": "#demo"
}]
}, {
"urlReg": "^http://www.baidu.com/$",
"demoPage": "http://www.baidu.com",
"replacements": [{
"fragment": "mods/demo/index.html",
"selector": "#lg"
}, {
"fragment": "mods/nav/index.html",
"selector": "#nv"
}]
}, {
"urlReg": "^http://www.taobao.com/$",
"demoPage": "http://www.taobao.com",
"replacements": [{
"fragment": "mods/demo/index.html",
"selector": "#J_Promo"
}, {
"fragment": "mods/nav/index.html",
"selector": "#J_Nav"
}]
}]
合并文件提供两种模式,代码静态合并,即页面中相对路径引用的资源文件都会被抓取合并为一个:
options:{
encoding:'utf8',
replacement:{
from:/src\//,
to:'build/'
},
comboJS:true,
comboCSS:true,
comboExt:'-combo'
}
若希望页面中引用的相对路径都编译为绝对路径并组成combo的模式http://url/??a.js,b.js
,需要开始relative
字段,这时comboJS
和comboCSS
字段不起作用
options:{
encoding:'utf8',
replacement:{
from:/src\//,
to:'build/'
},
// 本地文件引用替换为线上地址的前缀
relative:'http://g.tbcdn.cn/path/to/project/',
// 配合relative使用,将页面中所有以CDN引用的JS/CSS文件名进行拼合
combineAssets: true,
// KISSY Modules Maps File 地址,根据需要添加
comboMapFile:'http://g.tbcdn.cn/path/to/maps.js'
}
页面中的 JuicerMock 片段可以通过mockFilter
字段来配置,原理参照grunt-flexcombo
执行任务
task.run(['combohtml']);
功能说明
SSI
该服务依赖jayli-server,支持标准格式的 SSI include
<!--#include virtual="file.html" -->