说明
- 基于svn export命令抓取配置的依赖文件
打包方法
- 初始状态下,读取配置文件,读取svn路径信息,该包所有的依赖文件通过svn export命令导入本地的uid命名的目录
- 解析shtml文件,解析其中的include命令,生成新的html文件,这里要注意只能使用include命令,不可用ssi的其他诸如获取时间的命令
- 替换seajs的文件路径
- 压缩html里的脚本,替换相对路径和绝对路径
- 生成该应用所有的依赖map文件,读取文件的md5值保存
- 此时通过比对文件的MD5值,来判断是打全量包还是增量包
- 打全量包,按照配置文件的uid参数命名xxxx.zip
- 打增量包,按照配置文件的uid参数命名xxxx_patch.zip
- 执行zip压缩包命令,放到./dist/uid/目录下
- 生成配置文件uid.xml
- 根据命令参数判断是否删除svn export下来的文件目录
- 生成changelog日志文件,打包时间,打包文件等信息
- shtml文件里所引用的静态资源均存放在统一目录下,以相对路径引用,所以前面有一个步骤是把/static这样子的路径修改为../../static/的步骤
- 打包后的zip目录下,就只有shtml文件,参考下面的目录结构,fragment和template目录都没有了
配置文件xml
<!--业务包UID--> 1000001 <!--业务包名称--> 打包的业务名称 <!--业务包介绍--> 打包的业务描述 <!--是否需要登录--> true <!--包版本号--> 1.0.6 <!--主包地址--> http://example.com/1000001.zip <!--更新包地址--> http://example.com/1000001_patch.zip <!--业务包入口--> html/product/index.shtml
目录结构
|- rootDirectory/ |- html / |- product / |- fragment 存放页面片 |- template 存放模板文件,被shtml文件引用 |- index.shtml |- detail.shtml |- ... |- static / |- js |- style |- common-sinclude / 公共被shtml文件引用的文件列表,最好是以.tpl结尾 |- report.tpl |- env.tpl |- seajs.tpl
配置项说明
- 参见目录下的configzip.js文件
moduleexports = mapFile: "zip-manifest.json" // 保存文件hash的文件名 idcPath: "http://example.com/static/h5zip/" // 正式环境生成到xml文件里的包路径,即zip和patch字段的前缀 testPath: "http://example.com/static/h5zip/" // 测试环境 svnAccount: username: "username" // svn export命令时使用的svn账户信息 password: "password" baina: uid: 20000 // 产品ID,自定义,后面打包的文件名,配置文件等使用 entry: "html/product/index.shtml" // 产品访问入口文件 name: "产品描述文字" login: true // 是否需要登录 versionFormat: "yyyymmddHHMM" // 生成版本号的时间戳格式 svnPath: "svn://svn.example.com/projects/xxxxxx/project/" // svn路径前缀 staticPath: "/static" // 静态资源存放目录,注意/ relativePath: true // 是否使用相对路径访问静态资源 absolutePath: "https://cdn.example.com" // 使用url绝对路径访问静态资源,这里注意和staticPath配合,最终生成出来的路径是https://cdn.example.com/static/xxxx fullLinkProtocol: "http" // 替换页面里引用的静态资源,针对//cdn.example.com/static/xxxx这种形式的写法,加上协议前缀,防止本地化后无法访问 seajsTpl: '<script type="text/javascript" src="../../static/js/seajs-zepto/sea-zepto.js"></script>\n' + // seajs全量替换代码 '\t<script type="text/javascript">' + 'var basePath = "../../static/js/";' + 'seajs.config({base: basePath});' + '</script> ' dependencies: // 产品依赖文件 copyPath: // 需要被export到本地的目录列表,js html style是固定的,代码里需要用到,这个是为svn export使用的 style: "static/style/product/" html: "html/product/" js: "static/js/product/" "static/js/seajs-zepto/" other: "common-sinclude/" files: // 需要被打包的文件名glob匹配列表,即最终打包到zip包里的文件,这里有一个地方需要注意 style: "**/*" // 对应的类型的文件需要一致,比如copyPath下的style是字符串,则files下的style也需要是字符串,是数组也都需要是数组,并且长度需要一致,也就是一个path匹配一个file html: "*.shtml" js: "*.js" "*.js"
打包命令说明
- 命令native zip(暂时只提供一个命令)
- native zip project -option
Usage: zip options projectName 打包指定名称的应用,命令格式:native zip projectName -a 如果不指定-a,则程序自动判断打包类型,指定则打全量包 Options: -h --help output usage information -a --all 强制打全量包 -d --deleteFile 打包完成后删除下载的文件 -l --local 是否直接使用本地文件(如果有) -t --test 打测试环境的本地包 -n --number value 指定打包的版本号
日志
- 每一次打包都会生成log记录,保存在changelog.log文件里