当前位置:   article > 正文

Vite+Vue3+ElementPlus+Pinia+Axios+Vue-Router框架搭建_vue3 + vite + js + elementplus + axios

vue3 + vite + js + elementplus + axios

目录

一、前言 

二、项目初始化

三、安装依赖

1.配置路径

2.安装Vue-Router

3.安装Axios

4.安装Pinia和持久化插件

5.安装ElementPlus

6.自动导入 

7.安装图标

8.package.json文件

四、配置文件

1.配置.env.development开发环境

2.配置 .env.development生产环境

3.vite.config.js文件

4.配置router文件index.js

5.utils下新增request.js文件

6.store下新增index.js

7. main.js引入

8.测试启动


一、前言 

整体目录结构如下:

二、项目初始化

npm init vite@latest

填写项目名称,选择Vue,然后选择JavaScript 

进入文件目录 

 cd vite-vue3
npm i 

或者

yarn

然后在编辑器里将项目打开,项目结构如下:

三、安装依赖

1.配置路径

npm install @types/node --save-dev

2.安装Vue-Router

npm install vue-router@4

3.安装Axios

npm install axios

4.安装Pinia和持久化插件

 npm install pinia
npm install pinia-plugin-persistedstate

5.安装ElementPlus

npm install element-plus --save

6.自动导入 

npm install -D unplugin-vue-components unplugin-auto-import

 7.安装图标

npm install @element-plus/icons-vue

8.package.json文件

四、配置文件

在src文件夹下新建api、request、router、store、utils、views文件夹,在项目根目录下创建.env.development和.env.production文件夹。

在views文件夹下新增Index.vue文件,在app.vue文件夹中引入<router-view/>。

删除sysle.css中的样式 

1.配置.env.development开发环境

  1. # 页面标题
  2. VITE_APP_TITLE = vite
  3. # 开发环境配置
  4. VITE_APP_ENV = 'development'
  5. # 开发环境
  6. VITE_APP_BASE_API = '/dev-api'
  7. # 后端地址
  8. VITE_APP_URL = 'http://localhost:8080'

2.配置 .env.development生产环境

  1. # 页面标题
  2. VITE_APP_TITLE = vite
  3. # 生产环境配置
  4. VITE_APP_ENV = 'production'
  5. # 生产环境
  6. VITE_APP_BASE_API = '/vite-boot'
  7. # 后端地址
  8. VITE_APP_URL = 'http://192.168.237.160'

3.vite.config.js文件

  • VITE_APP_ENV, VITE_APP_BASE_API, VITE_APP_URL 都是从配置文件中读取的。
  • port: 80 为前端启动端口
  • hmr:true 前端热部署,无需重新加载页面即可重新修改。
  • open:true 启动项目时自动打开页面
  1. import { defineConfig } from 'vite'
  2. import vue from '@vitejs/plugin-vue'
  3. import path from "path";
  4. import { loadEnv } from 'vite'
  5. // https://vitejs.dev/config/
  6. import AutoImport from 'unplugin-auto-import/vite'
  7. import Components from 'unplugin-vue-components/vite'
  8. import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
  9. export default defineConfig(({ mode }) => {
  10. const env = loadEnv(mode, process.cwd())
  11. const { VITE_APP_ENV, VITE_APP_BASE_API, VITE_APP_URL } = env
  12. return {
  13. base: VITE_APP_ENV === 'production' ? '/vite/' : '/',
  14. plugins: [
  15. vue(),
  16. AutoImport({
  17. resolvers: [ElementPlusResolver()],
  18. }),
  19. Components({
  20. resolvers: [ElementPlusResolver()],
  21. }),
  22. ],
  23. resolve: {
  24. alias: {
  25. '@': path.resolve(__dirname, './src'),
  26. },
  27. extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'],
  28. },
  29. server: {
  30. port: 80,
  31. host: true,
  32. hmr:true,
  33. open: true,
  34. proxy: {
  35. [VITE_APP_BASE_API]: {
  36. target: VITE_APP_URL,
  37. changeOrigin: true,
  38. rewrite: (p) => p.replace(/^\/dev-api/, ''),
  39. },
  40. },
  41. },
  42. }
  43. })

4.配置router文件index.js

 history ,本地采用createWebHistory模式,线上采用createWebHashHistory

  1. import {createRouter, createWebHashHistory, createWebHistory} from "vue-router";
  2. import Index from "@/views/Index.vue";
  3. export const constantRoutes = [
  4. {
  5. path:"/",
  6. redirect: '/index'
  7. },
  8. {
  9. path: '/index',
  10. name: '测试首页',
  11. component:()=>import('@/views/Index.vue')
  12. },
  13. ]
  14. const router = createRouter({
  15. history: createWebHistory(),
  16. //history: createWebHashHistory(),
  17. routes: constantRoutes,
  18. scrollBehavior(to, from, savedPosition) {
  19. if (savedPosition) {
  20. return savedPosition
  21. } else {
  22. return { top: 0 }
  23. }
  24. },
  25. })
  26. export default router

5.utils下新增request.js文件

  1. import axios from 'axios'
  2. // 创建一个 axios 实例
  3. const request = axios.create({
  4. baseURL: import.meta.env.VITE_APP_BASE_API, // 这里设置为代理的路径
  5. timeout: 5000 // 请求超时时间
  6. });
  7. // 请求拦截器
  8. request.interceptors.request.use(
  9. config => {
  10. return config;
  11. },
  12. error => {
  13. console.log(error); // 打印错误日志
  14. Promise.reject(error).then(r => {});
  15. }
  16. );
  17. // 响应拦截器
  18. request.interceptors.response.use(
  19. response => {
  20. // 在这里可以做一些统一的响应处理逻辑
  21. return response.data;
  22. },
  23. error => {
  24. console.log(error); // 打印错误日志
  25. return Promise.reject(error);
  26. }
  27. );
  28. export default request

使用:api下新增test.js文件

url :后端请求路径

method: 请求方式

data: 携带数据

  1. import request from '@/utils/request'
  2. export function test1(data) {
  3. return request({
  4. url: '/test/test',
  5. method: 'post',
  6. data: data,
  7. })
  8. }
  9. export function test2(word) {
  10. return request({
  11. url: '/test/test1'+word,
  12. method: 'get',
  13. })
  14. }

6.store下新增index.js

写入以下内容。store文件夹下新增模块modules文件夹。

  1. import {createPinia} from "pinia";
  2. const store = createPinia()
  3. export default store

7. main.js引入

  1. import { createApp } from 'vue'
  2. import './style.css'
  3. import App from './App.vue'
  4. import router from "@/router/index.js";
  5. import ElementPlus from 'element-plus'
  6. import 'element-plus/dist/index.css'
  7. import * as ElementPlusIconsVue from '@element-plus/icons-vue'
  8. const app= createApp(App)
  9. for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
  10. app.component(key, component)
  11. }
  12. app.use(router)
  13. app.use(ElementPlus)
  14. app.mount('#app')

8.测试启动

在views下的index.vue文件中写入:

  1. <template>
  2. <el-button @click="submit" >确认</el-button>
  3. </template>
  4. <script setup>
  5. import {ElMessage} from "element-plus";
  6. function submit() {
  7. ElMessage.success("Hello World!")
  8. }
  9. </script>
  10. <style scoped>
  11. </style>

运行npm run dev

npm run dev

运行结果如下所示:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/883560
推荐阅读
相关标签
  

闽ICP备14008679号