小程序原生语法工程化
前言
关于微信小程序的工程化处理,如果像是选择mpvue
、wepy
等框架,项目其实就是按照一般的vue
项目进行处理,只不过基于一般的vue
项目多了一层转编译成原生小程序代码;
但如果直接使用原生语法来搭建小程序项目,那么该如何进行一些工程化的处理呢?不可能是完全地一个个页面独立地手写,这样效率太低了。
组件
组件的创建
小程序本身就提供了组件的语法,首先需要对.json
文件做一个声明:
1 | { |
而视图(wxml
)和样式(wxss
)则和一般页面的写法是一样的。主要的区别就是逻辑文件(js
)的写法,声明组件需要使用Component()
:
1 | Component({ |
properties
是用来声明组件的自定义属性的,可以在wxml
中当做data
来使用;实际上就是用来进行传递父级数据的。需要注意的是组件的生命周期和页面的生命周期有所不同,组件还能监听到所在页面(Page
)的一些生命周期,详情可以查看官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/lifetimes.html
组件的使用
总所周知,组件有全局组件和局部组件,小程序组件也一样;如果是全局组件,则声明在app.json
文件中,如果只是局部组件(单独使用),则可以在页面对应的json
文件中进行声明,语法如下:
1 | "usingComponents": { |
usingComponents
就是声明使用组件的地方,键名就是组件的标签名,键值就是组件的路径。
mixin
导出语法只能是CommonJS?
小程序为原生组件也提供了一套类似混合(mixin
)的语法,叫做behaviors
;用独立的js
文件编写,然后引入到相应的组件文件(js
)中即可。语法大致如下:
1 | // my-behavior.js |
其作用就是复用组件之间的自定义属性、方法、数据等等。
使用 behaviors
使用的语法跟vue
中mixin
的使用类似,在组件的behaviors
属性中添加相应的behavior
文件即可;
1 | // my-component.js |
WXS
语法限制
由于小程序本身语法的限制,导致在wxml
的模板语法中并不能使用自定义方法,但是wxs
定义的方法却能够在模板语法中使用,这样就能解决不能使用方法来处理模板语法中数据的问题了。
wxs
是小程序自定义的一套脚本语言,实际上就是基于ES5
进行的一些改造,不过有些原生对象做了限制,如Date
对象。因此,在wxs
中并不能使用ES6
及以上语法,且模块语法为CommonJS
!举个例子:
1 | var getMax = function(array) { |
由于习惯了ES6
以上的语法,所以写wxs
的时候务必注意:
- 不能使用
let
、箭头函数和模板字符串等语法 - 导出只能通过
module.exports
对象
创建和使用
wxs
既可以在wxml
中进行声明,然后直接使用;也可以写在独立的.wxs
文件中,然后引入到相应的wxml
中进行使用。需要注意的是,不管是哪种方式,wxs
里面的方法和数据都要进行导出之后才能进行使用!
wxml文件内
在wxml
中则通过在<wxs>
标签中声明wxs
语法,然后通过module
属性来指定该模块的名称,然后在wxml
中进行使用即可;
1 | <wxs module="demo"> |
独立的wxs文件
声明类似,只不过是把wxs
代码写在单独的.wxs
文件中而已:
1 | // demo.wxs |
然后通过<wxs>
标签进行引入:
1 | <wxs src="path/to/demo.wxs" module="demo"></wxs> |
通过<wxs>
的src
属性来指定.wxs
文件的位置;
其他注意事项
.wxs
和.js
文件不能互相引入,.wxs
只能引入.wxs
文件!- 使用
require()
函数引入.wxs
文件时,只能使用相对路径!
npm包的使用
这个流程官方文档就已经说的很清楚了,不再赘述了。
后话
虽说微信小程序为原生语法工程化提供了配套的语法和设施,但是很显然,同诸如vue
+ webpack
等成熟的前端工程化配套而言,像是一个『拙劣的模仿者』,也只能是凑合着用了。