0.0.10 • Published 6 years ago

@mycolorway/vest v0.0.10

Weekly downloads
-
License
MIT
Repository
github
Last release
6 years ago

vest

一个微信小程序的开发增强工具。

顾名思义,vest 就像官方开发者工具的贴身小马甲,在原汁原味保留官方开发体验的基础上,提供了这些好处:

  • 同时支持小程序项目和小程序 npm 包项目
  • 支持在项目文件中插入环境变量,按环境编译小程序(基于 dotenv)
  • 支持 @babel/presets-env 中定义的所有高级语法,包括异步函数(async function)
  • 支持使用 sass 编写小程序样式,并且可以引入 npm 包中的第三方样式
  • 自动构建小程序的 miniprogram_npm 文件夹,不需要在开发者工具上手动点“构建 npm”
  • 允许在所有文件中使用相对于小程序代码根目录的相对路径,例如:import request from '@/modules/request'
  • 支持 ESLint
  • 支持编写 js 单元测试(基于 Jest
  • 子项目 vest-pocket 提供了一些实用的 module

使用方法

首先,把 vest 作为 global package 安装:

npm i -g @mycolorway/vest

创建新的 vest 项目:

vest create tower

进入项目根目录,编译 vest 项目,编译之前会自动安装项目依赖:

cd tower
vest build

或者:

vest dev

最后用微信开发者工具打开 vest 项目根目录(如果是小程序 npm 项目,需要打开根目录里的 demo 文件夹)。

更多关于 vest command 和 options 的使用方法可以参考:

vest -h

插入环境变量

首先,在 vest 项目根目录里创建对应的 dot 文件,例如 .env.production

apiHost = 'https://x.zhiren.com'
amapKey = 'xxxxxxxxxxxxxxxxxxxx'

然后在任意项目文件中都可以通过 erb 语法插入定义好的环境变量,比如:

const apiHost = '<%= apiHost %>'
const amapKey = '<%= amapKey %>'

export { apiHost, amapKey }

异步函数(async/await)

确保 vest 项目的依赖中有 regenerator-runtimevest create 命令创建的项目会自动添加这个依赖),然后就可以直接在 js 文件中使用 async/await 了:

Page({
  async onLoad() {
    this.setData(await this.loadData())
  }
})

Sass

vest 会自动将所有的 *.scss 文件编译为 *.wxss 文件。

但是有个需要注意的问题,小程序的 wxss 本身是支持 import 其他 wxss 文件的,scss 在编译的过程中会把 @import 语句直接编译成相应的 css 代码,也就是说 @import 语句没有办法保留到 wxss 文件里。

为了解决这个问题,vest 引入了一种特殊的 import 语法,例如:

// app.scss

/*= import 'styles/base' */

@import '~weui-wxss/dist/style/weui.wxss';

会被编译为:

// app.wxss

@import 'styles/base';

.weui-xxx {
  ...
}

...

npm 支持

关于 npm 支持,请参考官方文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/npm.html

vest 只是对“构建 npm”操作做了自动化处理。

vest-pocket

vest-pocket 是对小程序官方框架的补充,提供了官方框架缺少的一些实用 module:

  • wx:对微信小程序的接口做了封装,让异步接口返回 Promise,配合 vest 可以支持 async/await 语法
  • Store:借鉴 Vuex.Store,在小程序中实现应用状态管理
  • Reactivity:跟 Vue 类似的响应式开发 module,可以用来监控对象属性的变化

通过 vest 创建的小程序项目,会自动将 vest-pocket 添加为项目依赖。