vite+TypeScript+vue3+router4+Pinia+ElmPlus+axios+mock項目基本配置

1.vite+TS+Vue3

npm create  vite
Project name:... yourProjectName
Select a framework:>>Vue
Select a variant:>>Typescrit

2. 修改vite基本配置

配置 Vite {#configuring-vite} | Vite中文網 (vitejs.cn)

vite.config.ts

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path';   // 編輯器提示 path 模塊找不到,可以cnpm i @types/node --dev 即可// https://vitejs.dev/config/
export default defineConfig({plugins: [vue()],     // 默認配置resolve: {alias: {'@': resolve(__dirname, 'src')    // 配置別名;將 @ 指向'src'目錄}},server: {port: 3000,       // 設置服務啟動的端口號;如果端口已經被使用,Vite 會自動嘗試下一個可用的端口open: true,       // 服務啟動后自動打開瀏覽器proxy: {          // 代理'/api': {target: '真實接口服務地址',changeOrigin: true,rewrite: (path) => path.replace(/^\/api/, '')     // 注意代理地址的重寫},// 可配置多個... }}
})

3.安裝vue-router

cnpm install vue-router@4 --save

創建src/router/index.ts文件,使用路由懶加載,優化訪問性能。

import { createRouter, createWebHistory, createWebHashHistory, RouteRecordRaw } from 'vue-router'const routes: Array<RouteRecordRaw> = [{path: '/',name: 'Home',component: () => import('@/views/home.vue') // 建議進行路由懶加載,優化訪問性能},{path: '/about',name: 'About',component: () => import('@/views/about.vue')}
]const router = createRouter({// history: createWebHistory(),    // 使用history模式history: createWebHashHistory(),	 // 使用hash模式routes
})export default router

main.ts?里面引入router

import { createApp } from 'vue'
import App from './App.vue'
import router from './router/index'createApp(App).use(router).mount('#app')

App.vue?文件中使用router-view?組件,路由匹配到組件會通過router-view?組件進行渲染。

<template><div id="nav"><router-link to="/">Home</router-link> |<router-link to="/about">About</router-link></div><router-view />
<template>

4.安裝vuex 安裝pinia

npm install vuex@next --save創建src/store/index.ts文件。
import { createStore } from 'vuex'const defaultState = {count: 0
}
const store = createStore({state () {return {count: 10}},mutations: {increment (state: typeof defaultState) {state.count++}}
})
export default store;
main.ts?里面引入vuex
import { createApp } from 'vue'
import App from './App.vue'
import router from './router/index'
import store from './store/index'const app = createApp(App);// 將store、router掛載到全局變量上, 方便使用
import { useStore } from "vuex";
import { useRoute } from "vue-router";
app.config.globalProperties.$store = useStore();
app.config.globalProperties.$router = useRoute();app.use(router).use(store).mount('#app')
<template><div>首頁 {{count}}<p @click="handleSkip">點我</p></div>
</template><script>
import { getCurrentInstance, computed, ref } from 'vue';
export default {name: 'Home',setup() {const { proxy } = getCurrentInstance();// 使用storeconst count = computed(() => proxy.$store.state.count);const handleSkip = () => {// 使用routerproxy.$router.push('/about');}return {count: ref(count),handleSkip}}
}
</script>

pinia

yarn add pinia
# 或者使用 npm
npm install pinia

main.ts

import { createApp } from 'vue'
import './style.css'
import router from './router'
import { createPinia } from 'pinia'
import App from './App.vue'createApp(App).use(router).use(createPinia()).mount('#app')

@/store/counter.ts

import { defineStore } from 'pinia'export const useCounterStore = defineStore('counter', {state: () => ({ count: 0 }),getters: {double: (state) => state.count * 2,},actions: {increment() {this.count++},},
})

Home.vue

<template><div><p>home</p><button @click="increment">count:{{count}};double:{{double}}</button></div>
</template><script setup lang="ts">
import { storeToRefs } from 'pinia';
import { useCounterStore } from '../store/counter';
const counter = useCounterStore()const {count, double}  = storeToRefs(counter)//這樣才是響應式的
const {increment } = counter
</script><style scoped></style>

5.安裝 UI庫

1.Element UI Plus

一個 Vue 3 UI 框架 | Element Plus

NPM

$ npm install element-plus --save

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

volar插件支持 獲取對Element UI Plus 的提示 需要在tsconfig.json做如下設置

新增"types": ["element-plus/global"]

{"compilerOptions": {// ..."types": ["element-plus/global"]}
}

2.Ant Design Vue

Ant Design of Vue - Ant Design Vue (antdv.com)

$ npm install ant-design-vue@next --save
$ yarn add ant-design-vue@next

import { createApp } from 'vue';
import Antd from 'ant-design-vue';
import App from './App';
import 'ant-design-vue/dist/antd.css';const app = createApp(App);app.use(Antd).mount('#app');

3.Iview

npm install view-ui-plus --save

import { createApp } from 'vue'
import ViewUIPlus from 'view-ui-plus'
import App from './App.vue'
import router from './router'
import store from './store'
import 'view-ui-plus/dist/styles/viewuiplus.css'const app = createApp(App)app.use(store).use(router).use(ViewUIPlus).mount('#app')

4.Vant 移動端

npm i vant -S

import Vant from 'vant'
import 'vant/lib/index.css';
createApp(App).use(Vant).$mount('#app)

6.安裝axios

npm install axios --save

封裝公共請求方法

新建工具類?src/utils/request.ts

import axios from 'axios'interface ApiConfig {body: object;data: object
}async function request(url: string, options: ApiConfig) {// 創建 axios 實例const service = axios.create({baseURL: "", // api base_urltimeout: 6000 // 請求超時時間});// 請求攔截service.interceptors.request.use(config => {// 這里可設置請求頭等信息if (options && options.body) {config.data = options.body;}return config;});// 返回攔截service.interceptors.response.use(response => {// 這里可進行返回數據的格式化等操作return response.data;});return service(url, options);
}
export default request;

使用方法

<script>
import request from "@/utils/request.ts"export default {setup() {request('/api/getNewsList').then(res => {console.log(res);// to do...});}
}
</script>

7.安裝mockjs

安裝

mock?模擬數據我們選用?mockjs?插件,vite?中需要安裝?vite-plugin-mock?插件。

npm install mockjs --savenpm install vite-plugin-mock --save-dev

vite.config.ts?中引用插件

import { viteMockServe } from 'vite-plugin-mock'export default defineConfig({plugins: [vue(),viteMockServe({supportTs: true,mockPath: './src/mock'})],   
})

使用mock

新建文件src/mock/index.ts,編寫一下代碼:

import { MockMethod } from 'vite-plugin-mock'
export default [{url: '/api/getNewsList',method: 'get',response: () => {return {code: 0,message: 'success',data: [{title: '標題111',content: '內容1111'},{title: '標題222',content: '內容2222'}]}}},// more...
] as MockMethod[]

然后我們就可以在工程中進行?mock?數據的訪問了,這里我們使用之前創建公共 api 請求方法 request。

<script>
import request from "@/utils/request.ts"export default {setup() {request('/api/getNewsList').then(res => {console.log(res);// to do...});}
}
</script>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212510.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212510.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212510.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言筆試例題_指針專練30題(附答案解析)

C語言筆試例題_指針專練30題(附答案解析) 指針一直是C語言的靈魂所在&#xff0c;是掌握C語言的必經之路&#xff0c;收集30道C語言指針題目分享給大家&#xff0c;測試環境位64位ubuntu18.04環境&#xff0c;如有錯誤&#xff0c;懇請指出&#xff0c;文明討論&#xff01;&am…

基于SSM+JSP網上訂餐管理系統(Java畢業設計)

大家好&#xff0c;我是DeBug&#xff0c;很高興你能來閱讀&#xff01;作為一名熱愛編程的程序員&#xff0c;我希望通過這些教學筆記與大家分享我的編程經驗和知識。在這里&#xff0c;我將會結合實際項目經驗&#xff0c;分享編程技巧、最佳實踐以及解決問題的方法。無論你是…

Flask筆記三之連接使用數據庫

本文首發于公眾號&#xff1a;Hunter后端 原文鏈接&#xff1a;Flask筆記三之連接使用數據庫 這一節介紹 Flask 與數據庫的連接&#xff0c;以及接口里查詢數據的操作。 這里使用的是 SQLAlchemy pymysql 實現與數據庫的連接&#xff0c;SQLAlchemy 的詳細介紹見之前的筆記有…

藍橋杯2021年5月青少組Python程序設計國賽真題

30 個人在一條船上,超載&#xff0c;需要 15 人下船于是人們排成一隊&#xff0c;排隊的位置即為他們的編號。報數,從1開始,數到9的人下船。如此循環,直到船上僅剩15 人為止&#xff0c;問都有哪些編號的人下船了呢? 2】判斷101-200之間有多少個素數&#xff0c;并輸出所有素數…

Maven上傳Jar到Nexus遠程倉庫的兩種方式

Maven上傳Jar到Nexus遠程倉庫的兩種方式 文章目錄 前言通過mvn clean deploy指令上傳第一步 配置maven的setting.xml文件第二步 配置pom文件第三步 執行打包指令 手動上傳 jar到遠程倉庫第一步 配置setting文件第二步 執行上傳命令 前言 各個公司在開發項目時&#xff0c;一般…

Linux C/C++并發編程實戰(8)CAS機制的ABA問題

文章目錄 無鎖隊列中的ABA問題ABA問題解決方案 ABA問題&#xff1a;CAS在操作的時候會檢查變量的值是否被更改過&#xff0c;如果沒有則更新值&#xff0c;但是帶來一個問題&#xff0c;最開始的值是A&#xff0c;接著變成B&#xff0c;最后又變成了A。經過檢查這個值確實沒有修…

Leetcode每日一題

https://leetcode.cn/problems/binary-tree-preorder-traversal/ 這道題目需要我們自行進行創建一個數組&#xff0c;題目也給出我們需要自己malloc一個數組來存放&#xff0c;這樣能達到我們遍歷的效果&#xff0c;我們來看看他的接口函數給的是什么。 可以看到的是這個接口函…

說說webpack中常見的loader?解決了什么問題?

在Webpack中&#xff0c;Loader是用于處理各種文件類型的模塊加載器&#xff0c;它們用于對文件進行轉換、處理和加載。常見的Loader解決了以下問題&#xff1a; 處理 JavaScript 文件&#xff1a;Babel Loader用于將最新的JavaScript語法轉譯為瀏覽器兼容的版本&#xff0c;以…

5_CSS三大特性盒子模型

第5章-盒子模型【比屋教育】 本課目標&#xff08;Objective&#xff09; 掌握CSS三大特性理解什么是盒子模型掌握內邊距padding的用法掌握外邊距margin的用法 1. CSS的層疊&#xff0c;繼承&#xff0c;優先級 1.1 CSS層疊 層疊&#xff1a;是指多個CSS樣式疊加到同一個元…

Web(8)SQL注入

Web網站&#xff08;對外門戶&#xff09; 原理&#xff1a;not>and>or(優先級) 一.低級注入 order by的作用是對字段進行排序&#xff0c;如order by 5&#xff0c;根據第五個字段 進行排序&#xff0c;如果一共有4個字段&#xff0c;輸入order by 5系統就會報錯不 …

詳細介紹開源固件-TF-A

什么是TF-A&#xff1f; TF-A&#xff08;Trusted Firmware-A&#xff09;是一種用于嵌入式系統的開源固件&#xff0c;而不是Linux的一部分。TF-A主要用于ARM架構的處理器和設備&#xff0c;它提供了一組安全和可信任的軟件組件&#xff0c;用于引導和初始化系統。 如下是其…

GD32F30X-RT-Thread學習-線程管理

1. 軟硬件平臺 GD32F307E-START Board開發板MDK-ARM Keil 2.RT-Thread Nano 3.RT-Thread 內核學習-線程管理 ? 在多線程操作系統中&#xff0c;可以把一個復雜的應用分解成多個小的、可調度的、序列化的程序單元&#xff0c;當合理地劃分任務并正確地執行時&#xff0c;這…

qt可以詳細寫的項目或技術

1.QT 圖形視圖框架 2.QT 模型視圖結構 3.QT列表顯示大量信息 4.QT播放器 5.QT 編解碼 6.QT opencv

Linux--RedHat--安裝和配置C++環境

百度下載&#xff0c;安裝包&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1IgBfCCRxGYZ_PPiedad0xQ 提取碼&#xff1a;ffff 下載后&#xff0c;建個目錄&#xff0c;先解壓好安裝包&#xff01; &#xff08;兩種方法&#xff09;執行如下命令&#xff1a; 參考…

Bypass open_basedir

講解 open_basedir是php.ini中的一個配置選項&#xff0c;可用于將用戶訪問文件的活動范圍限制在指定的區域。 假設open_basedir/var/www/html/web1/:/tmp/&#xff0c;那么通過web1訪問服務器的用戶就無法獲取服務器上除了/var/www/html/web1/和/tmp/這兩個目錄以外的文件。…

Java——面試:String 和 StringBuffer 的區別?

相同點&#xff1a; String 和 StringBuffer&#xff0c;它們可以儲存和操作字符串&#xff0c; 即包含多個字符的字符數據。 String 和 StringBuffer 的區別有以下幾點&#xff1a; 1.String 類提供了數值不可改變的字符串。而 StringBuffer 類提供的字符串進行修改。 當你知…

洛谷 P8674 [藍橋杯 2018 國 B] 調手表

文章目錄 [藍橋杯 2018 國 B] 調手表題目描述輸入格式輸出格式樣例 #1樣例輸入 #1樣例輸出 #1 提示 題意解析CODE分析一下復雜度 [藍橋杯 2018 國 B] 調手表 題目描述 小明買了塊高端大氣上檔次的電子手表&#xff0c;他正準備調時間呢。 在 M78 星云&#xff0c;時間的計量…

JVM虛擬機:命令行查看JVM垃圾回收器的執行信息

在eclipse中打開命令行窗口 window->show view->Terminal 這樣就打開了Terminal窗口&#xff0c;效果如下所示&#xff1a; java -XX:PrintCommandLineFlags -version 這個命令可以查看一些配置信息&#xff0c;其中最重要的配置信息就是&#xff0c;當前使用的G1回收器…

什么是漏洞掃描

漏洞掃描是指基于漏洞數據庫&#xff0c;通過掃描等手段對指定的遠程或者本地計算機系統的安全脆弱性進行檢測&#xff0c;發現可利用漏洞的一種安全檢測的 行為&#xff0c;也是一類重要的網絡安全技術。它和防火墻、入侵檢測系統互相配合&#xff0c;能夠有效提高網絡的安全性…

鍵盤打字盲打練習系列之成為大師——5

一.歡迎來到我的酒館 盲打&#xff0c;成為大師&#xff01; 目錄 一.歡迎來到我的酒館二.關于盲打你需要知道三.值得收藏的練習打字網站 二.關于盲打你需要知道 盲打系列教程&#xff0c;終于寫到終章了。。。一開始在看網上視頻&#xff0c;看到up主熟練的打字技巧&#xff…