事关我对于Vue3项目搭建的一些记录

「这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战

写在前面: 这个是我写给自己看的,便于以后能快速上手Vue3项目,目前就是处于学了vue3但还是用vue2开发的阶段,好记性不如烂笔头,学一遍记一遍,强化记忆.

事关我对于Vue3项目搭建的一些记录

vite代替webpack的配置文件

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path';

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  base:"./",//打包路径
  resolve: {
    alias:{
      '@': path.resolve(__dirname, './src'),//设置别名
    }
  },
  // 打包配置
  build: {
    target: 'modules',
    outDir: 'dists', //指定输出路径
    assetsDir: 'assets', // 指定生成静态资源的存放路径
    minify: 'terser' // 混淆器,terser构建后文件体积更小
  },
  //全局配置scss变量
  css: {
    preprocessorOptions: {
      scss: {
        additionalData: '@import "./src/assets/scss/global";'
      }
    }
  },
  server: {
    port:8084,//启动端口
    open: true,
     proxy: {
        '/api': {
          target: 'https://localhost:8084',
          changeOrigin: true,
          rewrite: path => path.replace(/^\/api/, '')
        }
      },
    cors:true
  }

})

复制代码

vscode的代码提示插件

//Prettier 代码美化
//Volar 格式化代码
//unplugin-vue-components 组件自动引入
复制代码

配置tsconfig.json

//还没研究过
复制代码

全局样式

style
    - index.scss //入口 管理文件
    - element.scss // 组件穿透样式
    - global.scss // 全局样式
    - color.scss //颜色管理
    - var.scss //变量管理
复制代码

Tailwind.css

类似与bs框架的样式使用,之前没发现的时候会自己写一个scss样式文件,作用就是把
display:flex;justify-content: space-between;align-items: center;变成
<div class="d-flex"> </div>

//其实Tailwind.css的基础作用就是这个,复杂的一般也用不上
复制代码

pinia-->vuex的替代方案

如果说,项目整体像vue3+ts靠拢的话,那vuex应该也会被取代,因为vuex对ts的支持比较有限,出现替代品也是理所应当的.

import { defineStore } from 'pinia'

export const useUserStore = defineStore({
  id: 'user',
  state: () =>({}),
  getters: {},
  actions: {}
})
复制代码

特点

  • Pinia的API设计非常接近 vuex5 的提案(vue的核心团队设计)
  • Pinia 与 Vue devtools同样适配,跟vuex食用方式一致
  • 天生具备类型推断(ts底层)

区别

  • id 是必要的,它将所使用 store 连接到 devtools。
  • 创建方式:new Vuex.Store(...)(vuex3),createStore(...)(vuex4)。
  • 对比于 vuex3 ,state 现在是一个函数返回对象
  • 没有 mutations,不用担心,state 的变化依然记录在 devtools 中。
  • 放弃了mutations,完全使用Actions

异步请求(axios)

关于异步请求,使用方式大同小异,只不过现在加入了ts,一些函数语法发生改变,这边记录一些关于异步请求的常规操作

  • 通过 import.meta.env.VITE_APP_BASE_URL 获取环境变量,配置 baseURL,如果接口存在多个不同域名,可以通过 js 变量控制。
  • 设置 timeout 请求超时、断网情况处理。
  • 设置请求头,携带 token
  • 异常拦截处理,后端通过你携带的 token 判断你是否过期,如果返回 401 你可能需要跳转到登录页面,并提示需要重新登录。
  • 响应拦截,通常后端返回 code、data、msg,如果是请求正常,我们可以直接返回 data 数据,如果是异常的 code,我们也可以在这里直接弹出报错提示。
  • 无感刷新 token,如果你的 token 过期,可以通过后端返回的 refreshToken 调用刷新接口,获取新的 token。当然这里涉及到很多细节,例如终端请求、重新发送请求、重新请求列队。
  • 中断请求,例如页面切换时,我们要中断正在发生的请求。

路由管理(vue-router4)

同样也是支持了ts的写法配置路由的类型是 RouteRecordRaw,这里 meta 可以让我们有更多的发挥空间,这里提供一些参考:

  • title: string; 页面标题,通常必选。
  • icon?: string; 图标,一般配合菜单使用。
  • auth?: boolean; 是否需要登录权限。
  • ignoreAuth?: boolean; 是否忽略权限。
  • roles?: RoleEnum[]; 可以访问的角色
  • keepAlive?: boolean; 是否开启页面缓存
  • hideMenu?: boolean; 有些路由我们并不想在菜单中显示,比如某些编辑页面。
  • order?: number; 菜单排序。
  • frameUrl?: string; 嵌套外链。

未完

Guess you like

Origin juejin.im/post/7035574647345119268