当前位置: 首页 > news >正文

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.lryc.cn/news/259328.html

相关文章:

  • 【rabbitMQ】模拟work queue,实现单个队列绑定多个消费者
  • pdf转png的两种方法
  • 【起草】1-2 讨论 ChatGPT 在自然语言处理领域的重要性和应用价值
  • Mapreduce小试牛刀(1)
  • 二百一十七、Flume——Flume拓扑结构之聚合的开发案例(亲测,附截图)
  • vue3+ts+vite+element plus 实现table勾选、点击单行都能实现多选
  • 在WPF窗口中增加水印效果
  • wget下载到一半断了,重连方法
  • Docker笔记:docker compose部署项目, 常用命令与负载均衡
  • Java单元测试:JUnit和Mockito的使用指南
  • 缓存雪崩问题与应对策略
  • python编程需要的电脑配置,python编程用什么电脑
  • 目标检测YOLO实战应用案例100讲-基于深度学习的跌倒检测(续)
  • 05-命令模式
  • Docker安全及日志管理
  • 【LeetCode每日一题】152. 乘积最大子数组
  • Python 反射
  • HTML基本网页制作
  • Tcl语言语法精炼总结
  • [GPT]Andrej Karpathy微软Build大会GPT演讲(下)--该如何使用GPT助手
  • 路由器静态路由的配置
  • [Firefly-Linux] RK3568在Ubuntu上安装内核头文件实现本地编译驱动程序
  • RabbitMQ Streams 详解
  • 跨境电商如何利用跨境客服软件提升销售额
  • css/less/scss代码注意事项
  • Git应用——代码提交规范 feat ,fix ,style
  • TDengine Kafka Connector将 Kafka 中指定 topic 的数据(批量或实时)同步到 TDengine
  • 单片机的低功耗模式介绍
  • 基于SSM实现的精品课程网站
  • 广州旅游攻略(略说一二)