由于公司一直没有启用新项目,一直用的是vue2的技术栈,决定搭一个vue3的demo项目可以快速应用在公司新项目的各个场景里。
也正好通过写文章来记录一下踩到的坑,和技术点,之后也方便回溯。
说干就干,现在都用vite+pinia+vue3的全家桶,先从零创建一个项目。
代码仓库:royal-vue3-project: vite+vue3+pinia+ts 后台管理系统 - Gitee.com
创建项目
npm create vite@latest
添加依赖
添加一些vue3项目常用插件,顺便记录下插件的作用
- pinia
- vue-router
- element-plus
- echarts
- qs
- less
- unplugin-auto-import
- unplugin-icons
- unplugin-vue-components
- vite-plugin-vue-setup-extend
- vueuse
Pinia
pinia是vue3项目里替代vuex的全局的状态管理方案,vue2也可以使用,使用简洁了不少,去掉了vuex中冗余的mutation,从action里可以直接操作state。
按需导入
unplugin-auto-import:为 Vite、Webpack、Rollup 和 esbuild 按需自动导入 API。
unplugin-vue-components:Vue 的按需组件自动导入。
//vite.config.js
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
plugins: [
AutoImport({
resolvers: [
ElementPlusResolver(),
]
}),
Components({
resolvers: [
ElementPlusResolver({
importStyle: mode === 'development' ? false : 'less'
})
]
})
]
vite-plugin-vue-setup-extend:为setup属性的script标签添加name
vue3里有setup属性的script标签无法自己添加name,写起来就非常冗余。
<script lang="ts">
import { defineComponent, onMounted } from 'vue'
export default defineComponent({
name: 'firstPage'
})
</script>
<script lang="ts" setup>
onMounted(() => {
console.log('mounted')
})
</script>
这个插件可以直接在script标签上设置name:
<script lang="ts" setup name="firstPage">
import { onMounted } from 'vue'
onMounted(() => { console.log('mounted') })
</script>
vueuse是提供了很多工具的插件库,下面是官网给的几个例子,比如获取光标坐标,一键换肤,本地存储
import { useLocalStorage, useMouse, usePreferredDark } from '@vueuse/core'
export default {
setup() {
// tracks mouse position
const { x, y } = useMouse()
// is user prefers dark theme
const isDark = usePreferredDark()
// persist state in localStorage
const store = useLocalStorage(
'my-storage',
{ name: 'Apple', color: 'red', },
)
return { x, y, isDark, store }
},
}