基于vite+elementPlus实现后台管理系统
通过vite新建项目
- 创建项目名称为element-plus-admin的项目
npm init vite-app element-plus-admin
- 进入项目
cd element-plus-admin
- 安装依赖
npm install
- 运行项目
npm run dev
- 然后浏览器访问http://localhost:3000/便可以看到项目了
引入依赖
- 引入vue-router-next
npm install vue-router@4 -D
- 引入vuex
npm install vuex@next -D
- 引入element-plus
npm install element-plus -D
- 引入typescript并且使用eslint检查代码
npm install eslint typescript @typescript-eslint/parser @typescript-eslint/eslint-plugin eslint-plugin-vue -D
使用typescript改写项目
index.html
<script type="module" src="/src/main.js"></script>
中的js写为tssrc/main.js文件名改为main.ts
打开/src/main.ts会发现
'./App.vue'
报错,新建文件src/shims-vue.d.ts1
2
3
4
5declare module '*.vue' {
import { defineComponent } from 'vue'
const Component: ReturnType<typeof defineComponent>
export default Component
}发现还是报错,需要添加typescript配置,在主目录新建tsconfig.json,添加下面代码就可以了
1
2
3
4
5
6
7
8
9
10
11
12{
"compilerOptions": {
"outDir": "./dist/",
"sourceMap": true,
"module": "commonjs",
"target": "ESNext",
"baseUrl": "."
},
"include": [
"./src/**/*"
]
}
eslint配置
1 | // 新建.eslintrc.js |
vite配置项
1 | // 新建vite.config.ts |
vue文件模板多个根节点报错
- vue3单文件已经支持多个根节点,如果报错,应该是vetur插件的问题
- 点击左上角 文件=》首选项=》设置,搜索
vetur.validation.template
,把前面的对号点掉 - 可以使用johnsoncodehk.volar插件替代vetur插件,该插件支持在template模板中有type提示
别名设置
需要修改3个地方,设置完成之后如果没有成功,需要重启vscode应该就可以了
修改vite.config.ts的配置,注意别名必须以 / 开头和结尾
1
2
3
4
5resolve: {
alias: [
{ find: '/@', replacement: path.resolve(__dirname, 'src') }
]
},修改tsconfig.json的配置,compilerOptions里面添加path参数
1
2
3"paths": {
"/@/*": ["src/*"]
}修改.eslintrc.js配置,添加两条rules
1
2'no-submodule-imports': ['off', '/@'],
'no-implicit-dependencies': ['off', ['/@']]
vuex中的state属性提示
直接使用vuex的useStore方法,没有state属性提示,需要改写useStore添加返回类型
在src/store/index.ts中添加代码,给state定义接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23import { createStore, Store, useStore as baseUseStore } from 'vuex'
interface IState {
count: number
}
const state:IState = {
count: 0
}
const mutations = {
add(state:IState) {
state.count++
},
sub(state:IState) {
state.count--
}
}
export const store = createStore<IState>({
state,
mutations
})
export function useStore(): Store<IState> {
return baseUseStore()
}src/main.ts引入vuex(模块引入已经使用上面设置的别名)
1
2
3
4
5
6
7import { createApp } from 'vue'
import App from '/@/App.vue'
import '/@/index.css'
import { store } from '/@/vuex/index'
const app = createApp(App)
app.use(store)
app.mount('#app')在src/components/HelloWorld.vue中测试,在setup方法中输入
store.state.
的时候就会出现前面定义的属性1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28<template>
count is: {{ count }}
<button 'add'> =
增加
</button>
<button @click='sub'>
减少
</button>
</template>
<script lang="ts">
import { defineComponent, toRef } from 'vue'
import { useStore } from '/@/vuex/index'
export default defineComponent({
name: 'HelloWorld',
setup() {
const store = useStore()
const count = toRef(store.state, 'count')
const add = () => store.commit('add')
const sub = () => store.commit('sub')
return {
count,
add,
sub
}
}
})
</script>
引入axios等插件时报错
vite2.0版本已经不需要添加了报错信息为: Uncaught SyntaxError: The requested module ‘/@modules/axios/index.js’ does not provide an export named ‘default’
需要在vite.config.ts配置文件添加
1
2
3optimizeDeps: {
include: ['axios']
}
生成的文件体积过大
添加build参数配置
1
2
3
4
5
6
7
8
9
10
11
12build: {
sourcemap: true, // 生成sourcemap文件
rollupOptions: {
output: {
manualChunks: {
'element-plus': ['element-plus'],
echarts: ['echarts']
}
}
},
chunkSizeWarningLimit: 600, // 文件大小超出配置时警告
},
添加postcss插件
添加css参数配置
1
2
3
4
5
6
7
8
9
10
11css: {
postcss: {
plugins: [
require('autoprefixer'),
require('tailwindcss'),
require('postcss-nested'),
require('postcss-simple-vars'),
require('postcss-import')
]
}
}