hpmo
Version:
hybirdApp package manager
321 lines (215 loc) • 9.9 kB
Markdown
> # 开始
## 新手入门
### 安装
安装hpm,在此之间先安装[tnpm](http://node.alibaba-inc.com/module/tnpm.html?spm=0.0.0.0.LxuAjz)
```
$ tnpm install hpm -g
```
### 初始化项目
使用`hpm init`命令可以在当前目录下初始化一个标准的H5App项目,并生成一个H5App demo。
创建后也可以手动修改当前目录下的[hpmfile.json](#hpmfile-json)文件配置应用属性
```
$ mkdir demo && cd demo
$ hpm init -i 20000127
```
> 扩展参数:
>
> `-i, --appid` 必填项,初始化应用ID(应用中心分配的appid)
>
> `-n, --name` 初始化应用名称,默认为H5AppDemo
>
> `-V, --ver` 初始化应用版本号,默认为1.0.0.0 (-V缩写参数注意大小写)
### 项目打包
开发好一个H5App项目后,可以用以下命令,根据hpmfile.json内的[build配置规则](#build)将指定内容打包为一个离线包,并加入安全签名文件
```
$ hpm build
```
> 扩展参数:
>
> `-V, --ver` 打包前先修改应用版本号 (-V缩写参数注意大小写)
>
> `-e, --env` 配置离线包的部署环境标识,默认为:dev
>
> `-t, --tar` 仅打包钱包8.4版以上的离线包
### 项目预览
在开发一个在线H5App应用时可以随时通过以下命令搭建一个本地静态HTTP服务器进行扫码预览。
```
$ hpm server
```
> 扩展参数:
>
> `-w, --watch` 开启watch功能。当源文件有内容变化时,已打开的预览网页将会自动刷新。
>
> `-p, --port` 自定义本地HTTP服务器的端口号,默认端口号为:3000
### 项目远程调试
在开发一个H5App应用时可以通过以下命令进行远程调试,依赖debug钱包客户端,并需要在支付宝设置中开启Weinre调试开关。设置方式如下:
> IOS版设置教程:
> 设置 -> 支付宝钱包 -> 开启 "WEB远程调试" 下的 "Weinre" 开关

> Android版设置教程:
> 1. 安装《支付宝设置》apk: 下载地址:[ClientSetting.apk](http://ux.alipay-inc.com/images/f/fc/ClientSetting.apk)
> 2. 打开《支付宝设置》,开启 "WEB远程调试" 下的 "开启调试" 开关
```
$ hpm debug
```
> 扩展参数:
>
> `-o, --offline` 开启扫码安装离线包到支付宝钱包的功能。(依赖debug钱包客户端,并需要在环境设置中打开Weinre调试开关)
>
> `-w, --watch` 开启watch功能。当源文件有内容变化时,已打开的预览网页将会自动刷新。(离线包安装到支付宝钱包调试时该功能无效)
>
> `-p, --port` 自定义本地HTTP服务器的端口号,默认端口号为:3000
---
> # 标准规范
## [hpmfile.json](id:hpmfile-json)
### appid
该应用在应用中心中分配到的appid,可通过应用中心获取
### name
应用的名称,一般为英文
### version
应用的当前版本号
版本使用 MAJOR.MINOR.PATCH.DATE 版本号,正则匹配 \d+\.\d+\.\d+.\d+。
DATE 为当前应用离线包的创建时间,PATCH 变更为 bugfix,MINOR 为非兼容的修改和功能新增,MAJOR 为定位调整或大范围的重写。
### author
应用的作者,格式为当前版本号的开发者域账号加邮箱
支持两种写法:
```
"author": "haibin.zhb <haibin.zhb@alipay.com>"
"author": {
"name": "haibin.zhb",
"email": "haibin.zhb@alipay.com"
}
```
### description
应用的描述信息,对该应用的功能和使用进行一个简单的描述
### repository
应用的代码仓库地址
### launchParams
应用的启动参数,具体可查阅:[H5容器启动参数](http://ux.alipay-inc.com/index.php/H5%E5%AE%B9%E5%99%A8%E6%96%87%E6%A1%A3#.E5.90.AF.E5.8A.A8.E5.8F.82.E6.95.B0)
> 注:将该字段转为字符串,即为应用中心后台部署和发布应用时的扩展参数内容。
```
"launchParams": {
"url": "/www/index.htm",
"showTitleBar": "NO",
"showToolBar": "YES",
"showLoading": "NO"
}
```
### host
在通过`hpm init`方式初始化项目时,将会自动分配一个值,如appid为20000135的应用配置将会自动生成:
```
...
"host": {
"dev": "http://20000135.h5app.alipay.net",
"test": "http://20000135.h5app.test.alipay.net",
"online": "https://20000135.h5app.alipay.com"
},
...
```
> 注意:如果离线应用需要做淘系免登,那么请将host自定义为一个淘系的域名,如
```
"host": {
"dev": "http://20000135.h5app.waptest.taobao.com",
"test": "http://20000135.h5app.waptest.taobao.com",
"online": "http://20000135.h5app.m.taobao.com"
},
```
> 注意不要用https,并且要保证 http://20000135.h5app.m.taobao.com 类似这个链接要能在浏览器里面打开,可以跳转到淘宝错误页面。
host下会有3个环境变量:`dev`、`test`、`online`。这三个key为固定值不可自定义,而对应的三个域名值可以自定义。
host下的三个值代表了在各自环境下启动此离线应用时,H5容器将会分配对应的虚拟域名给该应用,而不是原有的file协议。
如dev环境下运行该离线应用包下的`/www/index.htm`页面,实际url为:`http://20000135.h5app.alipay.net/www/index.htm`。
可在页面内执行`console.log(location.href)`观察实际效果。
### mapLocal
网络请求映射本地文件功能。
例如以下配置:
```
...
"mapLocal": {
"tfs.alipay.com/static": "/static"
}
...
```
以上配置代表了如果在当前H5App的生命周期内,如果有网络请求的路径中包含有`tfs.alipay.com/static`字符串,则会映射到离线包内tar包根目录下的`/static`文件夹内。
例如该H5App内的页面请求了一个URL为"http://tfs.alipay.com/static/test.png"的图片,那么实际打开的图片来源为tar包根目录下的"/static/test.png"。
注:如果本地对应的映射路径不存在文件,则H5容器会尝试获取原始路径的在线资源。如上例中的"/static/test.png"不存在,则会依然返回"http://tfs.alipay.com/static/test.png"在线资源图片。
### preBuild
preBuild内的值代表了当前目录下的一个shell文件。如果存在该文件,则在执行hpm build时会先执行该shell文件内的命令,然后再开始正式打包。
一般用于依赖spm或anima构建的项目,可以在prebuild.sh中先执行自定义的构建命令,然后再打包。
默认值:
```
...
"preBuild":"prebuild.sh",
...
```
### [build](id:build)
hpm build功能的依赖参数。
将应用打包为amr离线包时可指定包含内容或忽略内容,规则参照gulp
```
"build": {
"include": [
"./www/**",
"./res/*@2x.png"
],
"ignore": [
"./**/*.md"
]
}
```
### support
hpm publish功能的依赖参数,目前无效
配置当前应用版本号所支持的手机系统平台、手机系统版本号范围、钱包版本号范围。
目前仅支持ios和android平台。如果只发布到ios平台则只保留"ios"字段即可,删除"android"字段。
minSDK等参数如果为空则默认代表不限制。
```
"support": {
"ios": {
"minSDK": "",
"maxSDK": "",
"minOS": "",
"maxOS": ""
},
"android": {
"minSDK": "",
"maxSDK": "",
"minOS": "",
"maxOS": ""
}
}
```
### dependencies
当前应用的依赖项,目前无效
## 项目结构
### _dist
当执行hpm build命令后自动生成的临时dist目录,每次打包都会删除后重新生成。
目录下内容即为最后一次生成的离线包内的文件内容。
### _package
当执行hpm build命令后自动生成的临时目录。
所有离线包创建成功后都会自动保存于该目录内。
### res
初始化应用时自动创建的目录,该目录下有4个默认icon图标,分别为ios和android的高清和低清icon。
目前仅方便于项目内容管理。可忽略或直接删除。
### www
初始化应用时自动创建的目录,该目录下的内容即为该demo应用的src源码。
该目录名称和内容可自由修改。
> 注意:如果修改了该目录名称后,**切记需要同时手动修改hpmfile.json内的build.include属性值、launchParams.url属性值。**否则将导致应用无法正确打包和启动。
### hpmfile.json
初始化应用时自动创建的配置文件。该配置文件为json格式,包含了此应用的所有相关配置信息。
### prebuild.sh
则在执行hpm build时会先执行该shell文件内的命令,然后再开始正式打包。
一般用于依赖spm或anima构建的项目,可以在prebuild.sh中先执行自定义的构建命令,然后再打包。
---
> # 构建
## 构建过程详解
### 修改版本号
执行hpm build时如果同时输入了-V参数,则首先会将-V参数的值修改到hpmfile.json配置文件内的version字段内。
### dest
首先会获取hpmfile.json内的build字段内容,然后根据include和ignore的值判断需要进行打包的文件内容规则。然后通过gulp工具进行dest操作,将相应文件内容复制到_dist临时目录下。
### tar
如果是用于8.4以上版本的钱包,那么将会把所需的离线包内容打包合并为一个tar格式的资源包,用于统一加签。
### 生成Manifest.xml
由于应用中心推包依赖于Manifest.xml文件,因此此步骤会从hpmfile.json获取必要信息生成一个Manifest.xml存于_dist临时目录下
### 加签
当dest操作成功结束以后,将会检索_dist目录下的所有文件并调用服务端安全签名服务接口生成对应的签名,全部完成后会在_dist目录下生成一个CERT或CERT.json安全签名文件。
> 注意:加签操作必须在内网环境才能成功执行。
### 打包
当加签操作成功结束以后,会将当前_dist目录进行zip压缩,最终生成一个amr后缀的离线包,并保存于_package下对应版本号的目录内。