native-zip

1.0.4 • Public • Published

说明

  • 基于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

<?xml version="1.0" encoding="utf-8"?>
<package>
    <!--业务包UID-->
    <uid>1000001</uid>
    
    <!--业务包名称-->
    <name>打包的业务名称</name>
    
    <!--业务包介绍-->
    <descriptor>打包的业务描述</descriptor>
    
    <!--是否需要登录-->
    <login>true</login>
    
    <!--包版本号-->
    <version>1.0.6</version>
    
    <!--主包地址-->
    <zip>http://example.com/1000001.zip</zip>
    
    <!--更新包地址-->
    <patch>http://example.com/1000001_patch.zip</patch>
    
    <!--业务包入口-->
    <entry>html/product/index.shtml</entry>
</package>
 

目录结构

|- 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文件
module.exports = {
    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文件里

Readme

Keywords

Package Sidebar

Install

npm i native-zip

Weekly Downloads

0

Version

1.0.4

License

MIT

Last publish

Collaborators

  • kardel