目录
框架
市面上有许多小程序开发框架: wepy/mpvue/taro/uni-app 等等…
选原生开发还是第三方框架,一直是个很纠结的问题。
原生开发
- 原生开发对 Node、预编译器、环境变量等支持很差,影响开发效率和工程构建流程;
- 小程序定义了一套新的语法、标签、内置组件,需要一定的学习成本;
- 生态差,很多时候都需要从零手写,没有太多好用的第三方库;
第三方框架
- 担心性能不如原生;
- 担心有些功能框架实现不了,只能用原生;
- 担心框架不稳定,比原生的坑还多;
如何取舍
- 项目很大,页面数量 30+;
- 交互复杂;
- 需要同时在企微和微信中运行;
- 不考虑其他平台;
满足这四点,建议直接使用原生开发。
针对原生开发,为了提高开发效率,首先需要做的就是挑选一个构建工具。
不论第三方框架是基于 Vuejs
还是 React
,整个构建过程,它们都在干同一件事情:
将代码转换成小程序所约定的文件和目录
小程序原生开发,不论是组件还是页面,通常都由四种文件组成:
文件类型 | 必须 | 说明 |
---|
*.wxml | 是 | 视图 |
*.js | 是 | 脚本 |
*.json | 是 | 配置 |
*.wxss | 否 | 样式 |
原生开发对比第三方框架,在 js
的处理上,我们不需要借助 webpack
或者 babel
来完成 React
Vuejs
ES7/6
的转换,
如果需要嵌套一层构建逻辑,最简单最直接的方式就是做文件迁移,那么 Gulpjs
这种基于 node stream 便是一个很好的选择,
简单粗暴,将 源码
转换后迁移到对应 目录
中。
目录结构
脚本
结合项目的 workflow
来设计所需要的脚本
环境
开发、测试、预发布、生产,四个环境同时也对应着四个环境分支
运行
本地运行时,直接以本地代码为准运行项目
构建
环境构建时,以 remote env-branch 分支进行打包
依赖
名称 | 版本 | 说明 |
---|
del | ^6.0.0 | 清空指定目录 |
dotenv-flow | ^3.2.0 | 读取 .env 文件 |
fs-extra | ^10.1.0 | 替代 fs 操作目录或文件 |
gulp | ^4.0.2 | N/A |
gulp-dart-sass | ^1.0.2 | 将 scss 转换为 wxss |
gulp-json-format | ^2.0.0 | 格式化 json 文件 |
gulp-load-plugins | ^2.0.7 | 更容易的加载 gulp 插件 |
gulp-miniprogram-path-alias | ^0.3.1 | 让小程序支持 alias path 模块引入 |
gulp-preprocess | ^4.0.2 | 让小程序支持环境变量 |
gulp-rename | ^2.0.0 | 更改目录或文件的名称 |
gulp-zip | ^5.1.0 | 将 output 压缩为 zip |
require-dir | ^1.2.0 | 加载指定目录 |
through2 | ^4.0.2 | 解析流中的数据并操作 |
yargs | ^17.4.1 | 解析脚本中接收到的入参 |
上下文
环境变量、插件、配置等需要共享到每个 gulp task
中,提取一个 context.js
模块:
任务
清空输出目录
每次运行或构建项目时,清空 output 目录
迁移*.js
文件
迁移*.json
文件
迁移*.scss
文件
迁移*.wxss
文件
当用到某些第三方库时,里面的源码可能是 wxss
,因此需要支持 wxss
的迁移。
迁移*.wxml
文件
迁移*.wxs
文件
迁移others
迁移 scss|wxss|js|wxs|json|wxml|md
以外的文件,例如:图片。
制作 project.config.json
你已经注意到,根目录放置的是 _project.config.json
,而不是 project.config.json
。
由于 project.config.json
是非常重要的工程配置,不仅会影响本地开发者工具,还会影响小程序的发布上传,
如果该文件被追踪提交,开发成员相互篡改、相互覆盖极易导致出现各类问题,
为了统一,通过任务以 _project.config.json
为蓝图在本地初始化一份 project.config.json
。
构建 project.config.json
只有在运行 npm run build:${env}
时,才会执行该任务。
在 _project.confing.json
中,初始化了 miniprogramRoot
projectname
appid
因此在执行 npm run start:${env}
后,我们只需要将根目录导入开发者工具即可开始开发。
在构建目录时,为了方便打包给测试同事以及发布线上,该任务做了三件事情:
- 移除
miniprogramRoot
- 将
buildId
设置为 projectname
- 将当前环境的
APPID
设置为 appid
监听文件
运行项目时,每当新增文件、新增目录、改变文件,会执行该任务,并执行对应的任务。
Gulpfile.js
所有的任务脚本都已经准备好了,现在将 task
gulpfile
scirpts
结合起来,
在 scripts
中,设计了两组命令 npm run start:${env}
和 npm run build:${env}
,
对应的,gulp
也需要提供两组任务来执行这两组命令: