想必大家对于米7的小程序以及表盘已经了解,下面介绍编译文件与实际文件的相关内容
编译过程Zeppos提供的zeus内部使用的是zpm,主要分为图片,代码,以及quickjs(可选)部分
一、图片
图片部分zpm采用的是sharp,经过一堆算法最后完成转换
二、文件
js代码部分采用的是esbuild,是一个编译工具,把js进行弱编译
通过对比发现Page()是一个宏,编译后交给DeviceRuntimeCore.Page去注册程序相关事件,而$$xxx$$则是zeppos内部的api调用(吐槽:为什么不直接实现编译前的),而hmUI等是编译后真实存在的api
对于import,Zeppos是不支持原生支持的,zpm会把引入js文件按需编译进去
对于i18n的.po文件,编译后则会变成
languageTable,使用DeviceRuntimeCore.HmUtils.gettextFactory为$$app$$.globals添加一个gettext函数,完成语言适配
三、quickjs
对于quickjs部分这里引用Zeppos关于runtime的type字段的解释
而zpm可以通过
--jsc Compile JS file to C or bin, [--jsc c|bin] [默认值: ""]
来控制quickjs的使用,如果指定--jsc=c/bin,编译后会生成.js与.c/.bin文件并在app.json自动填上type
四、.zad&.zpk
通过file命令得知文件头
Zip archive data, at least v1.0 to extract, compression method=store
对于.zab与.zpk都是一样,最内部则是app-side.zip与device.zip,device.zip就是安装的.bin,而app-side由于众所周知的原因无法使用,在这里不做赘述
编译过程Zeppos提供的zeus内部使用的是zpm,主要分为图片,代码,以及quickjs(可选)部分
一、图片
图片部分zpm采用的是sharp,经过一堆算法最后完成转换
二、文件
js代码部分采用的是esbuild,是一个编译工具,把js进行弱编译
通过对比发现Page()是一个宏,编译后交给DeviceRuntimeCore.Page去注册程序相关事件,而$$xxx$$则是zeppos内部的api调用(吐槽:为什么不直接实现编译前的),而hmUI等是编译后真实存在的api
对于import,Zeppos是不支持原生支持的,zpm会把引入js文件按需编译进去
对于i18n的.po文件,编译后则会变成
languageTable,使用DeviceRuntimeCore.HmUtils.gettextFactory为$$app$$.globals添加一个gettext函数,完成语言适配
三、quickjs
对于quickjs部分这里引用Zeppos关于runtime的type字段的解释
属性 | 必填 | 描述 |
type | 否 | 运行时加载小程序的加载器类型,支持以下值: 0 当前值是默认值。表示该小程序用 QuickJS-js 解释器的加载器加载小程序,后缀名.js ;1 表示该小程序用 C 解释器的加载器加载小程序,后缀名 .c ;2 表示该小程序用 QuickJS-bytecode 解释器的加载器加载小程序,后缀名 .bin |
而zpm可以通过
--jsc Compile JS file to C or bin, [--jsc c|bin] [默认值: ""]
来控制quickjs的使用,如果指定--jsc=c/bin,编译后会生成.js与.c/.bin文件并在app.json自动填上type
四、.zad&.zpk
通过file命令得知文件头
Zip archive data, at least v1.0 to extract, compression method=store
对于.zab与.zpk都是一样,最内部则是app-side.zip与device.zip,device.zip就是安装的.bin,而app-side由于众所周知的原因无法使用,在这里不做赘述
最后编辑: