/uniapp-vue3-template

使用uniapp+vite+vue3+uview-plus3.0 搭建的微信小程序快速开发模版

Primary LanguageTypeScript

使用uniapp+vite+vue3+uview-plus3.0 搭建的微信小程序快速开发模版

使用uniapp+vite+vue3+typescript+uview-plus3.0 搭建的H5和微信小程序快速开发模版

uview-plus官方文档

本项目集众多项目的优点,打造最适合团队协作开发的项目模板。

在线预览地址:https://oyjt.github.io/uniapp-vue3-template/

特性

  • 集成uview-plus3.0 ui库
  • 支持多环境打包构建
  • 使用pinia状态管理
  • 封装网络请求,并支持Typescript
  • 支持路径别名
  • 支持自动加载组件和API
  • 自动校验git提交代码格式
  • 集成ESLint、StyleLint、EditorConfig代码格式规范
  • Typescript支持
  • 集成UnoCSS
  • 集成iconify图标库
  • 集成z-paging下拉刷新功能
  • 添加页面跳转拦截,登录权限校验
  • 支持token无痛刷新
  • 支持持续集成
  • 项目分包
  • 集成小程序隐私协议授权组件
  • 项目构建自动删除本地图片并替换本地图片路径为线上图片
  • 集成包体积视图分析插件

VScode插件推荐

目录结构

项目中采用目前最新的技术方案来实现,目录结构清晰。

uniapp-vue3-project
├ build                 vite插件统一管理
│  ├ vite
│  └ constant.ts
├ scripts               一些脚本
│  └ verifyCommit.js
├ src
│  ├ api                接口管理
│  ├ components         公共组件
│  ├ hooks              常用hooks封装
│  ├ pages              页面管理
│  ├ static             静态资源
│  ├ store              状态管理
│  ├ utils              一些工具
│  ├ App.vue
│  ├ main.ts
│  ├ manifest.json
│  ├ pages.json
│  ├ permission.ts      页面访问权限控制
│  └ uni.scss
├ types                 全局typescript类型文件
│  ├ auto-imports.d.ts
│  ├ components.d.ts
│  ├ global.d.ts
│  └ module.d.ts
├ README.md
├ eslint.config.js
├ index.html
├ package.json
├ pnpm-lock.yaml
├ tsconfig.json
├ uno.config.ts
└ vite.config.ts

vite插件管理

build
├ vite
│  ├ plugins
│  │  ├ autoImport.ts  自动导入api
│  │  ├ component.ts   自动导入组件
│  │  ├ imagemin.ts    图片压缩
│  │  ├ index.ts       入口文件
│  │  └ unocss.ts      unocss插件
│  └ proxy.ts          跨域代理配置
└ constant.ts          一些常量

接口管理

api
├ common       通用api
│  ├ index.ts
│  └ types.ts
├ user         用户相关api
│  ├ index.ts
│  └ types.ts
└ index.ts     入口文件

hooks管理

hooks
├ use-clipboard  剪切板
│  └ index.ts
├ use-loading    loading
│  └ index.ts
├ use-modal      模态框
│  └ index.ts
├ use-share      分享
│  └ index.ts
└ index.ts       入口文件

页面管理

pages
├ common           公共页面(分包common)
│  ├ login
│  │  └ index.vue
│  └ webview
│     └ index.vue
└ tab              主页面(主包)
   ├ home
   │  └ index.vue
   ├ list
   │  └ index.vue
   └ user
      └ index.vue

状态管理

store
├ modules
│  ├ app          app状态
│  │  ├ index.ts
│  │  └ types.ts
│  └ user         用户状态
│     ├ index.ts
│     └ types.ts
└ index.ts        入口文件

工具方法

utils
├ auth                token相关方法
│  └ index.ts
├ common              通用方法
│  └ index.ts
├ modals              弹窗相关方法
│  └ index.ts
├ request             网络请求相关方法
│  ├ index.ts
│  ├ interceptors.ts
│  ├ status.ts
│  └ type.ts
└ index.ts            入口文件

使用方法

# 安装依赖
pnpm install

# 启动H5
pnpm dev:h5

# 启动微信小程序
pnpm dev:mp-weixin

发布

# 构建测试环境
pnpm build:h5
pnpm build:mp-weixin

# 构建生产环境
pnpm build:h5-prod
pnpm build:mp-weixin-prod

代码提交

pnpm cz

更新uniapp版本

更新uniapp相关依赖到最新正式版

npx @dcloudio/uvm@latest

注意事项

  1. 如果项目中不需要压缩图片,可以移除vite-plugin-imagemin插件后再初始化,以避免由于网路问题造成初始化报错的情况

  2. 微信小程序开发者工具中内置的打包分析不准确,本项目使用了rollup-plugin-visualizer来分析小程序包体积,默认不开启,有需要的移除相关注释即可

  3. 自动构建处理本地图片资源,使用了vite-plugin-clean-buildvite-plugin-replace-image-url这两个插件,默认不开启相关功能,如果需要使用再build/vite/plugins/index.ts文件中移除相关注释即可

  4. 使用vite-plugin-replace-image-url插件,想要图片自动替换生效,需要在项目中使用绝对路径引入图片资源,如下示例所示。

    示例一:style中的图片使用

    <template>
      <view :style="`background-image: url('${bgImg}')`">
        ...
      </view>
    </template>
    <script setup lang="ts">
    import bgImg from '@/static/images/bg_img.png';
    </script>
    

    示例二:js中的图片使用

    <script setup lang="ts">
    import walletIcon from '@/static/images/icon_wallet.png';
    const menuList = [
      {
        name: 'wallet',
        title: '钱包',
        icon: walletIcon,
      },
      ...
    ];
    </script>
    

    示例二:css中的图片使用

    <style lang="scss">
    .icon {
      background-image: url('@/static/images/icon.png')
    }
    </style>
    
  5. 本项目中permission.ts中的拦截代码在小程序中的tab切换中无效,下面是官方给出的回复及解决方案。

拦截uni.switchTab本身没有问题。但是在微信小程序端点击tabbar的底层逻辑并不是触发uni.switchTab。所以误认为拦截无效,此类场景的解决方案是在tabbar页面的页面生命周期onShow中处理。

捐赠

如果你觉得这个项目对你有帮助,你可以请作者喝饮料🍹

微信收款码