VUE项目搭建2
组件自动注册
使用第三方组件,如果不使用全局注册每次使用需要单独引入组件,这样比较麻烦,可以使用组件自动注册的方式(非全局注册),也就是不需要再script setup
中导入就可以直接使用
安装
pnpm add unplugin-vue-components -D
在
vite.config.ts
中进行配置
dts:false 表示不自动生成组件类型文件,导入包就能识别
importStyle:false 表示不自动导入样式,因为已经在main.ts中导入
添加全局组件类型
注意:使用上面这种方式,工程目录下components
目录下的组件也会自动注册,但是需要添加全局组件类型
在types目录下新建components.d.ts
文件
1 | //自己定义的组件 |
router信息
Vue Router的信息会保存在history.state
上
1 | const onClickLeft = () => { |
打包SVG地图
图片格式为svg的,SVG地图是xml格式,可通过ID来使用,一次加载动态使用,图片也无需import
- 安装
pnpm install vite-plugin-svg-icons -D
- 配置vite.config.ts
1 | import { createSvgIconsPlugin } from 'vite-plugin-svg-icons' |
- 导入mian.ts
import 'virtual:svg-icons-register'
- 使用

其中#icon
为固定写法,后面写文件夹和名称,其中图片要放在src下的icons目录
访问权限控制
1 | router.beforeEach((to) => { |
修改页面标题
可以在配置元信息meta中定义标题
路由全局后置守卫设置标题给页面,扩展原信息类型,因为需要等页面全部加载完成再去改标题比较合适
1 | { |
1 | router.afterEach((to) => { |
加载进度条
- 安装
pnpm i nprogress 和 pnpm i @types/nprogress -D
- 设置router.ts中设置
1 | import nProgress from 'nprogress' |
- 在路由前置守卫增加NProgress.start(),在后置守卫增加NProgress.done()
VueUse
VuewUse是一个组合式API的工具库,支持网页常用的功能,如窗口宽度、滚动距离、进入可视区、倒计时等
安装:
pnpm i @vueuse/core
使用
1 | import { useWindowSize } from '@vueuse/core' |
如果不用VueUse,自己实现可以这样
composables组合函数
在vue概念中,组合函数是一个利用vue的组合式API来封装和复用有状态的逻辑函数,一般使用use开头来命名,表示使用某功能,例如下面这个就是一个组合函数,里面既有loading数据,又含有函数
上传图片
1 | export const uploadImage = (file: File) => { |
支付流程

路由器独享守卫
WebSocket
http/https只能是客户端向服务端发送请求,而服务端不能主动向客户端发送请求,所以引入WebSocket实现双向通信

websocekt的直接使用
在实际开发项目中,一般使用socket.io-client
来实现客户端功能,他是基于webSocket的js库
需要提前安装pnpm i socket.io-client
,socket.io的常规使用
发送信息使用emit
方法,关闭连接使用close
方法,事件监听用on
方法,监听的事件名称需要和后端来协定
nextTick
在更新数据后,vue是异步更新,Dom可能还没有更新完成,所以使用nextTick来确保数据更新完成,然后再调用与Dom相关的操作
1 | //可以直接使用await 来操作,因为nextTick返回的是promise |
第三方登录
常见的第三方登录流程

需要准备的东西:
- QQ互联实名认证,必须要拥有合法域名
- 创建web引用,配置回调地址
- 得到appid和回调地址
使用openId登录
第三方登录成功后,会有一个openid,这时需要根据官方文档获取相应的api,实现登录
因为QC是外部引用的,所以需要进行类型定义,在global.d.ts中声明
配置好后,ESlint还是会提示错误,这时需要再上面使用/*global QC*/
来告诉ESLint,QC是一个全局声明变量
开发环境和生产环境
pnpm dev开发环境
pnpm build生产环境
因为生产环境和开发环境有一些地址或者变量会有不同,所以要区别对待
建立开发和生产环境变量
分别在项目目录下建立.env.development和.env.production
文件,里面的变量要大写VITE_
开头

声明变量
我们在之前使用过import.meta.env.BASE_URL
但是在上一步声明的变量目前还没有定义,所以需要进行扩展,可以发现import.meta.env.BASE_URL
等都是定义在ImportMetaEnv
接口中,所以在该接口中进行扩展(接口重复定义实现扩展),这时就可以正常使用
html模板页面区别环境
上边的变量都是在组件中使用,如果在html中想要区分怎么办,可以使用vite-plugin-html
插件
安装:pnpm i vite-plugin-html
在vite.config.ts中进行配置
在html中使用变量
真机调试
手机端是没有开发者环境的,可以使用eruda来实现,不过需要仅仅在开发环境中使用,在index.html中引入
mock数据
开发过程中如果后端没有提供好接口,可以mock数据
安装pnpm i vite-plugin-mock mockjs -D
及npm i --save-dev @types/mockjs
需要在vite-env.d.ts文件中,添加declare module 'mockjs'
在vite.config.ts中增加配置
1 | import { viteMockServe } from 'vite-plugin-mock' |
新建mock/index.ts
1 | import Mock from 'mockjs' |
调用mock
1 | request(import.meta.env.VITE_APP_CALLBACK + '/patient/message/sys/list').then( |
单元测试
安装pnpm i vitest -D
在package.json中设置
创建test目录,创建测试名称需为test.ts结尾