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')

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM