微信小程序出现引起了不少讨论,许多开发者都跃跃欲试尝试了小程序的开发。它从新定义了自身的一套开发规范,对于现有的html页面是不支持了。css
为此咱们设想了一套方案,怎么最快速的把现有的开发流接入到小程序中,并能快速的修改现有html项目以符合微信小程序的规范?因而写了一套html暴力转译成wxml的方案,以及搭配了初始模板的脚手架。结构沿用feWorkflow,大部分改动是针对目录的gulp工做流。html
小程序有一套默认的文件结构,根目录下必须存放有如下3个文件:git
. ├──app.js ├──app.json ├──app.wxss
而页面则由4个文件构成:github
. ├──js ├──wxml ├──wxss ├──json
根据这套规则,经过GUI工具新建的模板,这个脚手架会默认建立一个源码src
目录:json
点击开发 ,会建立dist
文件目录,将编译后的less
(或在设置中配置成sass)文件转换成wxss
文件,其余html,js, css文件的更改也会同步处理到dist
目录中,图片资源则会经过imagemin
进行压缩,抛出到dist/image
目录中。src
源码目录和dist
目录(二者都可以经过配置项修更名称)的划分是为了保持源代码的完整性,以及维持图片的原始文件(psd等),而不会在编译过程当中被破坏。gulp
到目前的微信开发者工具的版本(0.10.101100),已经附带自动刷新页面的功能,因此src目录中的全部改动,会同步修改dist目录下的文件并刷新,能够无缝在熟悉的编辑器中进行操做。小程序
脚手架示例:
新建项目:segmentfault
开发项目:windows
demo:微信小程序
上文提到了小程序有默认的一套脚手架结构,编译工具会将源码目录下的全部html文件进行转译,并建立一个当前目录名-build
的文件夹,将全部编译后的wxml存放到page/文件名/文件名.wxml
。app.json
全局配置的pages
也会默认建立。根据建立的目录名,将同名的css
文件,重命名为wxss
文件,并存放到同名目录中,当css与文件名不符,则合并不符的css文件,存放到全局目录的app.wxss
中。而由于小程序再也不支持jQuery等等通用库,源码目录下的js会所有忽略,页面级的js,则会复制到同名目录中,这个js则包括注册页面的Page函数基础模板。
举个例子:
源码test
目录文件结构以下
├──test | └──css | └──index.css | └──global.css | └──js | └──index.js | └── index.html | └── other.html
编译后的目录结构会改变为:
├──test-build | └──app.wxss | └──page | └── index | └── index.wxml | └── index.wxss | └── index.js | └── other | └── other.wxml
先来看一下wxml和html的标签大体的对比图:
根据图中标签的的匹配规则,在编译过程当中,遍历html文件,先转换成xml,保证img等包含闭合标签,再经过正则匹配符合的标签来替换或者删除。这个替换标签能够在设置
中更改。
举个例子:
<!-- html --> <div class="flow-form_tips"> <div class="address"> <span>广东联通</span> <span>当即生效</span> <span>月底失效</span> <span>全国可用</span> </div> <p class="desc">河南联通维护中,流量充值缓慢</p> <div class="tips hide">当地运营商维护中,请稍后再试</div> </div>
编译后:
<!-- wxml --> <view class="flow-form_tips"> <view class="address"> <text>广东联通</text> <text>当即生效</text> <text>月底失效</text> <text>全国可用</text></view> <view class="desc">河南联通维护中,流量充值缓慢</view> <view class="tips hide">当地运营商维护中,请稍后再试</view> </view>
尺寸单位
小程序推出了自身的计量单位rpx
,并推荐使用750
的设计稿做为开发标准,而目前组内开发广泛使用640
的设计稿进行设计,同时使用rem
进行适配。
因此在转义过程当中,添加了设计稿尺寸的设置,默认设置,是640
设计稿,100
px计算rem
,默认乘以2
倍。
这个设置的意思是:咱们在开发过程当中使用640的设计稿,并使用rem兼容,iphone4屏幕320px的html font-size为100px
,css中表现为:640 / 2 / 100rem
, 即640px == 3.2rem
;
css中会去遍历全部匹配rem
的属性,获取数值,经过(match * fontSize * (750 / viewport)).toFixed(2) * times
来计算rpx,即(匹配数值 * fontSize * (750 / 640)).toFixed(2) * 2
。
而px转rpx则是由(match * (750 / viewport) * times).toFixed(2)
来转换。
wxss支持大部分css的属性,可是仍有些状况下不兼容,但编译工具没有作处理,省得出现误删的状况,假如页面中写了a
选择器,则须要手动改为navigator
选择器。
全部png|jpg|gif|svg格式图片统一进行压缩并复制到个目录下的image
目录中,并将wxml中image的src,和wxss中的background-url修改成../../image/
小程序的开发语言已经与平常开发的语言有所不一样,一套通用的方案已是不可行了,仍是有不少东西须要手工去处理,好比template
等。转译工具是在内部的产品环境下测试的,可能会有许多考虑不周的地方,欢迎你们斧正。
github
mac: feWorkflow-wechat-app-v0.0.1.dmg
windows: feWorkflow-wechat-app-win.7z