介绍一些小程序的扩展的工具类库。
目录:
1、瘦身工具
通过剔除无用文件、压缩图片、复用代码等方式减少小程序代码包体积。
1.1 安装
1
| npm install -g miniprogram-slim
|
1.2 使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| Usage: miniprogram-slim <command>
Options: -v, --version output the version number -h, --help output usage information
Commands: analyzer [options] Analyze dependencies of miniprogram, find out unused files
cpd [options] <dir> Detect duplications in source code
sprite [options] <input...> Covert images into css sprites
imagemin [options] <input...> Minify images seamlessly
Examples: $ miniprogram-slim analyzer -t $ miniprogram-slim cpd src $ miniprogram-slim imagemin images*.png $ miniprogram-slim sprite -f emoji images*.png
|
1.2.1 依赖分析,查找无用文件( analyzer [options] )
对小程序的页面和组件进行依赖分析,找出未被引用的文件,生成packOptions项,在开发者工具上传代码时忽略无用文件。
支持小程序/插件,仅对 wxml、wxss、wxs、js、json 以及组件进行分析,不包括组件内的图片等资源。
需要注意的是,js 文件的依赖,支持 import 和 require 导入的模块,但运行时计算的路径如 require(a + b) 将无法识别。
用法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| Usage: miniprogram-slim analyzer [options]
Analyze dependencies of miniprogram, find out unused files
Options: -o, --output [dir] path to directory for result (default: "./analyzer")
-i, --ignore <glob> glob pattern for files what should be excluded from unused files
-w, --write overwrite old project.config.json
-t, --table print miniprogram file size data
-h, --help output usage information
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| { "packOptions": { "ignore": [] }, "dependencies": { "app": { "esDeps": [], "wxmlDeps": [], "wxssDeps": [], "compDeps": [], "wxsDeps": [], "jsonDeps": [], "files": [] }, "pages": {}, "subpackages": {} }, "unusedFiles": [], "data": {} }
|
1.2.2 代码相似度比较 ( cpd [options] )
对 jscpd 模块的简单封装,默认会在执行的目录下生成一份 .jscpd.json 配置文件,report 目录保存生成的代码对比报告。
用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| sage: miniprogram-slim cpd [options] <dir>
Detect duplications in source code
Options: -c, --config [file] path to config file (default: ".jscpd.json")
-o, --output [dir] path to directory for reports (default: "./report/")
-i, --ignore <glob> glob pattern for files what should be excluded from duplication detection
-h, --help output usage information
|
1.2.3 图片压缩 ( imagemin [options] )
对 imagemin 模块的简单封装。
用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Usage: miniprogram-slim imagemin [options] <input...>
Minify images seamlessly
Options: -o, --output <dir> output directory
--png-quality <string> instructs pngquant to use the least amount of colors (default: "0.65,0.8")
--no-progressive creates baseline JPEG file
-h, --help output usage information
|
1.2.4 生成雪碧图代码 (sprite -f emoji images/*/.png)
对 spritesmith 模块的简单封装,能够自动生成雪碧图和对应的 css 代码。
用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Usage: miniprogram-slim sprite [options] <input...>
Covert images into css sprites
Options: -o, --output [dir] output directory (default: "./")
-f, --filename [string] filename of spritesheet (default: "sprite")
-p, --padding [number] padding to use between images (default: 2)
-h, --help output usage information
|
2、微信小程序定义文件
微信小程序 API 的 TypeScript 类型定义文件
1.1 安装
1 2 3 4 5 6 7 8
| # 安装对应最新基础库的定义文件 npm install miniprogram-api-typings
or
# 安装对应基础库版本 2.4.1 的定义文件 npm install miniprogram-api-typings@2.4.1
|
3、扩展微信小程序api支持promise
微信小程序 API 的 TypeScript 类型定义文件
1.1 安装
1 2
| npm install --save miniprogram-api-promise
|
1.2 使用
在小程序入口(app.js)调用一次promisifyAll,只需要调用一次。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| 示例: import { promisifyAll, promisify } from 'miniprogram-api-promise';
const wxp = {}
promisifyAll(wx, wxp) console.log(wxp.getSystemInfoSync()) wxp.getSystemInfo().then(console.log) wxp.showModal().then(wxp.openSetting())
wxp.getSystemInfo({success(res) {console.log(res)}})
promisify(wx.getSystemInfo)().then(console.log)
|
4、threejs-miniprogram
Three.js 小程序 WebGL 的适配版本
WebGL(Web图形库)是一个JavaScript API,可在任何兼容的Web浏览器中渲染高性能的交互式3D和2D图形,而无需使用插件。该API可以在HTML5 canvas元素中使用。 这种一致性使API可以利用用户设备提供的硬件图形加速
1.1 安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
npm install --save threejs-miniprogram
import {createScopedThreejs} from 'threejs-miniprogram'
Page({ onReady() { wx.createSelectorQuery() .select('#webgl') .node() .exec((res) => { const canvas = res[0].node const THREE = createScopedThreejs(canvas) }) } })
|
说明
- 本项目当前使用的 Three.js 版本号为 0.108.0,如要更新 threejs 版本可发 PR 修改或 fork 后自行修改。
- 该适配版本的 THREE 不在全局环境中,如使用 Three.js 的其他配套类库,需要自行传入 THREE 到类库中。
5、lottie-miniprogram
lottie 动画库适配小程序的版本
Lottie是一个用于Android,iOS,Web和Windows的库,用于解析使用Bodymovin导出为json的Adobe After Effects动画,并在移动设备和网络上呈现它们
1.1 安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
npm install --save lottie-miniprogram
<canvas id="canvas" type="2d"></canvas>
import lottie from 'lottie-miniprogram' Page({ onReady() { wx.createSelectorQuery().select('#canvas').node(res => { const canvas = res.node lottie.setup(canvas) }).exec() } })
lottie.setup(canvas) lottie.loadAnimation({ ... })
|
1.2 接口
目前提供两个接口:
需要在任何 lottie 接口调用之前调用,传入 canvas 对象
- lottie.loadAnimation(options)
与原来的 loadAnimation 有些不同,支持的参数有:
- loop
- autoplay
- animationData
- path (只支持网络地址)
- rendererSettings.context (必填)
说明
- 本项目是以 npm 的方式依赖原 lottie-web 项目,若原项目有新版本,可直接改变依赖的版本号。
- 本项目依赖小程序基础库 2.8.0 里性能更好的 canvas 实现,由于还有些小问题没有正式开放,但目前用在此处暂无发现问题。
- 由于小程序本身不支持动态执行脚本,因此 lottie 的 expression 功能也是不支持的。
6、参考文档