🏆 有任何问题欢迎提 Issues
git clone https://github.com/Yill625/taro3-vue3-template.git
cd taro3-vue3-template
yarn install
yarn dev:weapp
<style> v-bind 语法npx @tarojs/cli init WechatAppDemo
使用 npx 可以不用全局先安装 cli 工具,直接下载最新 Taro3 工程

本地安装 cli 确保项目基本运行
# 安装cli 用来执行构建等操作
yarn add @tarojs/cli
# 预览
yarn dev:weapp
打开微信开发工具 工程目录需要指向构建出来的 dist 文件


yarn add @vue/eslint-config-prettier @vue/eslint-config-typescript eslint-plugin-prettier -D
yarn add vue-tsc -D
在 package.json 中 script 添加命令
"scripts":{
"tsc": "vue-tsc --noEmit --skipLibCheck",
"lint": "eslint --ext .vue --ext .js --ext .ts src/"
}

# https://github.com/typicode/husky
# https://typicode.github.io/husky/#/?id=articles
yarn add husky -D
# 初始化 husky
npx husky install
# 测试命令
npx husky add .husky/pre-commit "echo test"

编辑 pre-commit 执行 Eslint 检查和 Ts 检查

yarn add @commitlint/{config-conventional,cli} -D
# Configure commitlint to use conventional config
echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js
# Add hook
npx husky add .husky/commit-msg 'npx --no -- commitlint --edit "$1"'
# 首次安装不起作用可以运行 npx husky install
Nutui 京东风格的轻量级移动端 Vue 组件库
yarn add @nutui/nutui-taro
安装 nutui 会遇到样式的报错 如图

解决办法:引入 @tarojs/plugin-html 插件 https://taro-docs.jd.com/taro/docs/use-h5
全局引入后的依赖大小

为了按需引入,先安装插件 babel-plugin-import
# https://nutui.jd.com/#/starttaro
yarn add babel-plugin-import -D
按需引入后的主包大小
import { createApp } from 'vue'
import App from './App.vue'
import { Button, Cell, Icon } from '@nutui/nutui-taro'
import '@nutui/nutui-taro/dist/style.css'
createApp(App)
.use(Button)
.use(Cell)
.use(Icon)

样式处理 因为 nutui 的设计稿是 375 的 所以将框架的设计尺寸调整为 375

到这里 nutui 组件库已经采坑完毕 能够正常使用 事件调用正常

nutui 事件不触发 是因为 @tarojs/plugin-html 版本不对 我当前这个项目固定设置为 3.3.12 如果设置为最新 3.3.13 则不行
随着业务代码和组件的引入越来越多,主包的大小一定会越来越大,超过 2m 的主包以后微信开发工具就无法使用预览的功能,为了提前做好准备在一开始就进行分包处理,主包只包含公共组件和公共代码,分包里放入业务代码和业务代码
//app.config.ts
export default {
pages: ['pages/index/index'],
window: {
backgroundColor: '#fff',
backgroundTextStyle: 'light',
navigationBarBackgroundColor: '#fff',
navigationBarTitleText: 'WeChat',
navigationBarTextStyle: 'black',
},
subpackages: [
{
root: 'pages/featureA',
pages: ['index/index'],
},
],
}

更多优化

~~使用 hooks 来封装~~
// 原来封装代码 废弃
import { getCurrentInstance } from '@tarojs/taro'
import { onMounted } from 'vue'
const Current = getCurrentInstance()
export function useDidShow(callback) {
onMounted(callback)
Current?.page?.onShow && (Current.page.onShow = callback)
}
export function usePullDownRefresh(callback) {
Current?.page?.onPullDownRefresh && (Current.page.onPullDownRefresh = callback)
}
export function useReachBottom(callback) {
Current?.page?.onReachBottom && (Current.page.onReachBottom = callback)
}

yarn add vuex@next --save
创建 store 目录 添加 index.ts 文件
实现 vuex Ts 的提示 并进行模块化处理
import { createStore, Store } from 'vuex'
import { InjectionKey } from 'vue'
// 定义模块类型
interface User {
number: number[]
}
export interface State {
user: User
}
// define injection key
export const key: InjectionKey<Store<State>> = Symbol()
const user = {
state: {
number: [1, 2, 3],
},
mutations: {
ADD_NUMBER(state: User, payload) {
state.number.push(payload)
},
},
actions: {
addNumber(context, number) {
context.commit('ADD_NUMBER', number)
},
},
getters: {
getNumbers(state) {
return state.numbers
},
},
}
const store = createStore({
modules: {
user,
},
})
export default store
yarn add pinia
yarn add taro-plugin-pinia
项目配置文件 config/index.js 中配置:
// ...
plugins: ['taro-plugin-pinia']
// ...

开启 Vue DevTools 之后 预览主包体积会大于 2M 导致无法预览 视情况开启调试 正式构建不会开启 Vue DevTools 调试

默认不开启 devtools 调试 新增 script 开启
"devtools:weapp": "npm run build:weapp -- --watch --devtools"
page {
font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', Helvetica, Segoe UI, Arial, Roboto,
'PingFang SC', 'miui', 'Hiragino Sans GB', 'Microsoft Yahei', sans-serif;
}
// 解决iPhone x 以后的机型 底部安全区域的问题 https://jelly.jd.com/article/6006b1055b6c6a01506c87fd
.safe-area-bottom {
padding-bottom: constant(safe-area-inset-bottom);
padding-bottom: env(safe-area-inset-bottom);
}
需要注意开发者工具的项目设置:
<style scoped>,建议使用 cssModules 代替。<teleport>$ claude mcp add taro3-vue3-template \
-- python -m otcore.mcp_server <graph>