Life and freedom Ge Lin ——— Draw by Razzh

从零搭建 Taro 多端编译环境

Jun 23 · 8 min

之前公司有微信小程序和 H5 双端编译的需求,所以自己用 Taro3 + Vue3 + Ts 搭了一个项目:仓库地址

#一、搭建项目架构

#初始化项目

初始化项目之前,需安装 taro-cli,请参考 Taro 文档,完成 tarojs 安装

使用命令创建模板项目:

taro init myApp

构建 weapp

pnpm dev weapp

打包完成后发现两点问题

  • 微信提示 vonder.js 超过 500KB
  • 代码依赖分析一直处于 loading,无法查看主包的依赖构成

taro 在打包的时候在 shell 中输出了提示:

image

在命令中添加 production 就可以开启生产环境的压缩模式,taro-cli 搭建的初始代码经过压缩后为 267KB

image

PS:在编译 H5 平台的时候,不推荐开启 production 模式,会导致编译报错:

image

H5 若需要开启依赖分析,可以在 config 中开启 webpack-bundle-analyzer 来分析打包后的依赖:

image

#二、设置代码规范的 Eslint Prettier

  • 代码规范 ESlint
  • 代码格式化 Prettier

#1、安装依赖

pnpm add @vue/eslint-config-prettier @vue/eslint-config-typescript eslint-plugin-prettier prettier -D

#2、设置配置

目录下新增 .eslintrc.js.prettierrc 文件,具体配置可以按自己的喜好来。
如果 VSCode 中已经存在插件 prettier,请关闭。两者在保存的时候,VSCode 中的 prettier 插件的优先级大于项目中的 prettier。

#三、Git 提交规范

#1、husky

pnpm add husky -D
# 向package中添加script
npm set-script prepare "husky install"
# 始化husky,将 git hooks 钩子交由husky执行
pnpm prepare

#2、lint-staged

pnpm add lint-staged -D
# 添加commit前置hook 提交前进行代码检查
npx husky add .husky/pre-commit "npx lint-staged"
# 配置.lintstagedrc.js的检查规则
image

#3、commitlint

用于规范 git commit 提交的时候的信息格式,有助于多人开发时候的 commit 信息统一规范

pnpm add @commitlint/cli @commitlint/config-conventional -D
# 配置commitlint配置文件
echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js
# 添加husky hook -> commit-msg
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'

提交的时候的格式约定:

类型描述
build编译相关的修改,例如发布版本、对项目构建或者依赖的改动
chore其他修改,比如改变构建流程、或者增加依赖库、工具等
ci持续集成修改
docs文档修改
feat新特性、新功能
fix修改 bug
pref优化相关,比如提升性能、体验
refactor代码重构
revert回滚到上一个版本
style代码格式修改,注意不是 css 修改
test测试用例修改

来看看官方的 demo 示例:

图片

#4、conventional-changelog

用于记录 CHANGELOG 日志,可以看到团队的更新日志,并能点击对应的 commit 看相应的代码

pnpm add conventional-changelog conventional-changelog-cli -D

Example

#5、standard-version

pnpm add standard-version -D
# 配置脚本
npm set-script release "standard-version"

配合 conventional-changelog 使用,standard-version 能做到:

  • 可以自动添加 package 中的版本号
  • 基于提交的 commit 自动生成 changelog
  • 自动为当前版本号创建一个 tag,你也可以自己指定版本:
npm run release -- --release-as xxx (you want version)

#发版的工作流

  • git add .
  • git commit -m "feat: xxx"
  • git tag v1.0.0(版本号)
  • npm run release
  • git push
  • git push origin tag 将生成的 tag 上传至远程仓库

#四、安装 unocss

pnpm add unocss @unocss/webpack -D

在入口文件 app.ts 中引入 unocss

添加 Unocss 小程序预设(用来转换 pxrpx 的单位换算)

pnpm add unocss-preset-weapp -D

在根目录下新增 unocss.config.ts,引入如下代码:

import presetWeapp from 'unocss-preset-weapp'
import { transformerAttributify, transformerClass } from 'unocss-preset-weapp/transformer'
 
export default {
  presets: [
    presetWeapp({
      isH5: process.env.TARO_ENV === 'h5',
      platform: 'taro',
      taroWebpack: 'webpack5',
      designWidth: 375,
      deviceRatio: {
        640: 2.34 / 2,
        750: 1,
        828: 1.81 / 2,
        375: 2 / 1
      }
    })
  ],
  transformers: [transformerAttributify(), transformerClass()]
}

另外还要在 tarowebpack config 文件中配置 H5 平台和 小程序 平台。

PS: taro 不同版本的根字体不同,需要在 index.htmlbody 上添加class="text-base"

#推荐使用 class 写法

<view class="mt-40px">unocss</view>
 
<view class="flex items-center text-green/500">unocss</view>

class="mt-40px" 在375(iphone6iphoneX)的屏幕下对应小程序转换出来将会是:

.mt-40px {
  margin-top: 80rpx;
}

对应 H5 平台转换结果:

.mt-40px {
  margin-top: 40px;
}

#五、Taro 多平台编译组件

参考 Taro 多端组件
对应的演示 demo 分别在 pages/indexcomponents

浙ICP备2024129591号-1
春秋(Live) - 张敬轩
--:-- / --:--
  1. 1春秋(Live)张敬轩
  2. 2不吐不快(live)张敬轩
  3. 3男孩最痛(live)张敬轩
  4. 4粤语残片(live)陈奕迅
  5. 5几分之几(live)卢广仲
  6. 6地球很危险古巨基
  7. 7樱花树下(live)张敬轩

春秋 (Live) - 张敬轩 (Hins Cheung)

词:林夕

曲:Edmond Tsang

那夜谁将酒喝掉

因此我讲得多了

然后你摇着我手拒绝我

动人像友情深了

我没权终止见面

只因你友善依然

仍用接近甜蜜那种字眼通电

没人应该 怨地怨天

得到这结局

难道怪罪神没有更伪善的祝福

我没有为你伤春悲秋不配有憾事

你没有共我踏过万里

不够剧情延续故事

头发未染霜 着凉亦错在我幼稚

应快活像个天使

有没有运气再扮弱者 玩失意

有没有道理为你落发

必须得到世人同意

心灰得极可耻 心伤得无新意

那一线眼泪 欠大志

爱若能堪称伟大 再难挨照样开怀

如令你发现为你而活到失败

令人不安 我品性坏

我没有为你伤春悲秋不配有憾事

你没有共我踏过万里

不够剧情延续故事

头发未染霜 着凉亦错在我幼稚

应快活像个天使

有没有运气再扮弱者玩失意

有没有道理为你落发

必须得到世人同意

心灰得极可耻 心伤得无新意

那一线眼泪 欠大志 太没意思

若自觉这叫痛苦未免过份容易

我没有被你改写一生怎配有心事

我没有被你害过恨过

写成情史 变废纸

春秋只转载要事

如果爱你欠意义

这眼泪 无从安置

我没有运气放大自私的失意

更没有道理在这日

你得到真爱制造恨意

想心酸 还可以 想心底 留根刺

至少要见面上万次