Vue3配置
1.Path
npm install @types/node --save-dev
npm i sass-loader sass -d
import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import path from 'path'
vite.config.js
const resolve = (dir: string) => path.join(__dirname, dir)
export default defineConfig({ plugins: [vue()], resolve: { alias: { '@': resolve('src'), 'comps': resolve('src/components'), 'apis': resolve('src/apis'), 'views': resolve('src/views'), 'utils': resolve('src/utils'), 'routes': resolve('src/routes'), 'styles': resolve('src/styles') } }, })
- 在
tsconfig.node.json文件中 - 添加
"allowSyntheticDefaultImports": true 
- 在
tsconfig.json文件中 - 添加
-
"paths": { "@":["./src"], "@/*":["./src/*"] //添加类别名 }
2.Axios跨越
实现跨域共3个步骤:
1,vue3.0根目录下创建vue.config.js文件;
module.exports = {
devServer: {
proxy: {
'/api': {
target: 'https://you.163.com/', //接口域名
changeOrigin: true, //是否跨域
ws: true, //是否代理 websockets
secure: true, //是否https接口
pathRewrite: { //路径重置
'^/api': ''
}
}
}
}
};
2,将上述代码块写入其中;
如图:

3,将api接口放入请求的url中;
使用页面的代码块:
<template>
<div>
<H1>TEST</H1>
<p>{{data}}</p>
</div>
</template>
<script>
import axis from 'axios';
export default {
name: 'Test',
data() {
return {
data: {},
};
},
methods: {
getData() {
axis.get('/api/xhr/search/queryHotKeyWord.json')//axis后面的.get可以省略;
.then(
(response) => {
console.log(response);
this.data = response;
})
.catch(
(error) => {
console.log(error);
});
},
},
mounted() {
this.getData();
},
};
</script>
<style scoped>
</style>
代码解析:

浏览器页面:

剩下的就是把数据渲染到页面了。
实际示例
vue3 8080端口请求flask8081端口服务数据:
module.exports = {
devServer: {
host: '0.0.0.0',
port: 8080,
open: true,
proxy: {
'/api/testcase/': {
target: 'http://127.0.0.1:8081/', //接口域名
changeOrigin: true, //是否跨域
ws: true, //是否代理 websockets
secure: true, //是否https接口
pathRewrite: { //路径重置
'^/api/testcase/': '/api/testcase/'
}
}
},
},
}
axis.get('/api/testcase/')//axis后面的.get可以省略;
.then(
(response) => {
console.log(response);
this.totaltableData = response.data['result'];
})
.catch(
(error) => {
console.log(error);
});
flask接口地址:
# http://127.0.0.1:8081/api/testcase/
@app.route('/api/testcase/')
def alltestcase():
pass
3.Router
npm i vue-router@next
index.ts
import { createRouter, createWebHashHistory, RouteRecordRaw } from "vue-router";
const routes: Array<RouteRecordRaw> = [
{
path:'/',
component:()=>import('@/components/testhome.vue')
}
]
const router = createRouter({
history:createWebHashHistory(),
routes:routes
})
export default router
main.ts
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
const app = createApp(App)
app.use(router)
app.mount('#app')
4.Vuex4
npm i vuex@next
index.ts
import { createStore } from "vuex";
interface State{
count:number
}
const store = createStore<State>({
state(){
return{
count:0
}
},
mutations:{
increment(state){
state.count++
}
}
})
export default store
test.vue
<template lang=""> <div> 测试一下 <button @click="increment">{{count}}</button> </div> </template> <script setup> import { ref, computed } from 'vue' import { useStore } from 'vuex' const store = useStore(); const count = computed(() => { return store.state.count }) const increment = () => { store.commit('increment') } </script> <style lang=""> </style>
5.element-plus
npm install element-plus --save
完整引入#
如果你对打包后的文件大小不是很在乎,那么使用完整导入会更方便。
// main.ts
import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import App from './App.vue'
const app = createApp(App)
app.use(ElementPlus)
app.mount('#app')
按需导入#
您需要使用额外的插件来导入要使用的组件。
自动导入 推荐#
首先你需要安装unplugin-vue-components 和 unplugin-auto-import这两款插件
npm install -D unplugin-vue-components unplugin-auto-import
然后把下列代码插入到你的 Vite 或 Webpack 的配置文件中
Vite#
// vite.config.ts import AutoImport from 'unplugin-auto-import/vite' import Components from 'unplugin-vue-components/vite' import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' export default { plugins: [ // ...
AutoImport({
imports: ["vue", "vue-router"], // 自动导入vue和vue-router相关函数
resolvers: [ElementPlusResolver()],
}),
Components({
resolvers: [ElementPlusResolver()],
}),
],
}
Volar 支持#
如果您使用 Volar,请在 tsconfig.json 中通过 compilerOptions.type 指定全局组件类型。
// tsconfig.json
{
"compilerOptions": {
// ...
"types": ["element-plus/global"]
}
}
"include": [
"src/**/*.ts",
"src/**/*.d.ts",
"src/**/*.tsx",
"src/**/*.vue",
"auto-imports.d.ts",
"components.d.ts"
],
Webpack#
// webpack.config.js const AutoImport = require('unplugin-auto-import/webpack') const Components = require('unplugin-vue-components/webpack') const { ElementPlusResolver } = require('unplugin-vue-components/resolvers') module.exports = { // ... plugins: [ AutoImport({ resolvers: [ElementPlusResolver()], }), Components({ resolvers: [ElementPlusResolver()], }), ], }
6.启动后,不能够用ip地址访问,只能用localhost
启动后,不能够用ip地址访问,只能用localhost
启动指令添加 '--host' 配置即可。
"dev": "vite --host"
7.sass
npm i sass-loader sass -d
vite.config.ts
css:{ preprocessorOptions:{ scss:{ additionalData:`@import "./src/sytle/variables.scss";`, } } },
8.判断是否移动设备
isMoblie.ts
export const isMoblie = () => { let flag = navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i) return flag }
9.pinia(大菠萝)
npm install pinia
// 容器钩子
import { defineStore } from "pinia";
export const useCounterStore = defineStore('count', {
// 创建state
state: () => ({
count: 0,
msg: 'hello,world',
ary: [1, 2, 3,],
}),
// 计算
getters: {
doubleCount(state): number {
return state.count * 2
// return this.count * 2
},
OneCount(): number {
return this.doubleCount + 1
}
},
// 方法
actions: {
change() {
this.count += 2;
this.msg = "哈哈哈"
}
}
})
main.ts
import { createApp } from 'vue'
import App from './App.vue'
import {createPinia} from 'pinia'
import router from './router'
const app = createApp(App)
app.use(createPinia())
app.use(router)
app.mount('#app')


浙公网安备 33010602011771号