前端vue3分享——项目封装axios、vite使用env环境变量

文章目录

⭐前言

大家好,我是yma16,本文分享关于前端vue3分享------项目封装axios、使用env环境变量。

该系列往期文章:
csdn新星计划vue3+ts+antd赛道------利用inscode搭建vue3(ts)+antd前端模板
认识vite_vue3 初始化项目到打包
什么是axios

axios是一个流行的JavaScript库,用于在浏览器和Node.js环境中进行HTTP请求。下面是axios的原理:

Axios是基于Promise构建的,它可以使用async/await,因此在发出请求时,返回的是一个Promise对象。这个Promise对象中包含了请求成功和请求失败的回调函数。

Axios发送的请求被封装成一个请求对象。请求对象包括请求url、请求方法、请求头、请求数据等信息。在创建这个请求对象时,可以设置全局的默认值,这些默认值可以用于所有请求。

Axios是通过XMLHttpRequest对象来实现请求的。在浏览器中,XMLHttpRequest是通过ActiveXObject对象创建的。在Node.js中,它使用http或https模块来实现请求。

Axios可以进行拦截器的设置,它提供了全局请求拦截器和全局响应拦截器。这些拦截器可以用于在请求或响应之前进行一些处理,比如添加请求头或对响应进行一些处理。

Axios还提供了取消请求的功能。这个功能是通过一个CancelToken对象来实现的。使用这个对象可以在发送请求后取消这个请求。这对于用户取消请求或者在组件销毁时取消请求非常有用。

Axios提供了一些高级功能,比如支持请求和响应的转换、自动处理不同数据格式(如JSON、FormData、Binary等)以及在Node.js中处理代理等。

vite处理环境变量

Vite 的工作原理主要分为两部分:开发时编译和生产时打包。在开发时,Vite 利用 ES Modules 特性实现了单文件组件快速编译和热更新。在生产时,Vite 利用 Rollup 进行打包,生成静态文件。

在开发模式下,Vite 会通过一个简单的 HTTP 服务器来服务于应用程序。当浏览器请求应用程序时,Vite 会查找所有的入口文件,并生成一个映射表,把每个文件的依赖关系记录下来。当应用程序需要加载某个模块时,Vite 会首先解析该模块的依赖,并根据依赖关系加载其他模块。在加载过程中,Vite 会利用浏览器的缓存机制,以及服务端的缓存机制来优化加载速度。

对于环境变量的处理,Vite 的原理是通过对项目中 import.meta 对象的支持来实现的。import.meta 对象提供了当前模块的元数据信息,包括模块的 URL 和环境变量等信息。在 Vite 中,用户可以在 vite.config.js 配置文件中设置环境变量,然后通过 import.meta.env 对象来访问这些变量,从而动态地读取环境变量。在打包时,Vite 会自动将这些环境变量编译到生成的静态文件中,从而实现在生产环境中使用环境变量的功能。

⭐vue3封装统一的axios请求

官方文档:https://www.axios-http.cn/docs/interceptors

封装一个简单的axios,在每次请求的请求头都加上 headers: {'X-Custom-Header': 'yma16'}

💖 请求拦截器

http.ts

javascript 复制代码
import axios from "axios";

// 实例
const createInstance = (baseURL:string)=>{
    return axios.create({
        baseURL:baseURL,
        timeout: 1000,
        headers: {'X-Custom-Header': 'yma16'}
    })
};

// @ts-ignore
const http:any=createInstance('');


// 添加请求拦截器
http.interceptors.request.use(function (config:any) {
    // 在发送请求之前做些什么
    return config;
}, function (error:any) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
http.interceptors.response.use(function (response:any) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    return response;
}, function (error:any) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
});

export {http};

在api调用的时候引入http

这是登录的api

javascript 复制代码
import {http} from "../..//http/index";

export const loginUser: any = (params: any) => {
  return http.post("/cloudApi/user/login", params);
};

export const registerUser: any = (params: any) => {
  return http.post("/cloudApi/user/register", params);
};

登录查看请求头出现X-Custom-Header:yma16

⭐vue3使用env环境变量

💖 vite env变量规则

变量规则

以 VITE_ 为前缀的变量才会暴露给经过 vite 处理的代码

在.env 定义

bash 复制代码
VITE_APP_HOST= http://localhost:9090/

在.env.development定义

bash 复制代码
VITE_APP_HOST= http://localhost:9090/

在.env.production定义

bash 复制代码
VITE_APP_HOST= https://yongma16.xyz/back-front/

使用import.meta调用env环境变量

在util工具目录下编写一个全局获取变量的方法globalEnv

javascript 复制代码
export const globalEnv=()=>{
    return import.meta.env
};

💖 vite.config获取env参数

vite.config获取env参数使用oadEnv

process.cwd() 可以获取当前路径

vite开发环境代理切换

mode参数为config参数的模式

mode 本运行为development

修改vite.config.ts

javascript 复制代码
import { defineConfig,loadEnv } from "vite";
import vue from "@vitejs/plugin-vue";
// @ts-ignore
import { resolve } from "path";
// @ts-ignore
import Components from "unplugin-vue-components/vite";
// @ts-ignore
import { AntDesignVueResolver } from "unplugin-vue-components/resolvers";

// https://vitejs.dev/config/
export default defineConfig(({mode})=>{
  // 运行模式
  console.log('mode',mode)
  // 当前路径
  console.log('process.cwd()',process.cwd())
  // @ts-ignore
  const env=loadEnv(mode,process.cwd())
  console.log('env',env)
  const proxy={
    "^/cloudApi/": {
      target: env.VITE_APP_HOST,
      changeOrigin: true,
      ws: true,
      rewrite: (path) => path.replace(/^\/cloudApi/, ""),
    },
  };

  return {
    // 打包相对路径
    base: './',
    server: {
      port: 3000,
      open: true,
      cors: true,
      proxy: {
        ...proxy
      },
    },
    "css": {
      preprocessorOptions: {
        less: {
          javascriptEnabled: true,
          patterns: [resolve(__dirname, "./src/style/main.less")],
        },
      },
    },
    resolve: {
      alias: {
        "@": resolve(__dirname, "src"),
      },
    },
    plugins: [
      vue(),
      Components({
        resolvers: [AntDesignVueResolver()],
      }),
    ],
  }
});

⭐总结

项目封装axios、vite使用env环境变量主要是统一代码规范,便于开发且后续好维护。

💖 编码sliod原则

SOLID 原则是一种设计原则,用于指导编写可维护、可扩展、易于理解和可复用的代码。

  • 单一职责原则 (Single Responsibility Principle, SRP): 一个类或模块只负责一项职责,降低耦合度。

  • 开闭原则 (Open/Closed Principle, OCP): 类和模块应该对扩展开放,对修改关闭,通过抽象化来实现。

  • 里氏替换原则 (Liskov Substitution Principle, LSP): 子类应该可以替换父类并且仍能正常运行。

  • 接口隔离原则 (Interface Segregation Principle, ISP): 不应该强迫使用者依赖于他们不需要的接口。

  • 依赖反转原则 (Dependency Inversion Principle, DIP): 抽象不应该依赖细节,细节应该依赖于抽象。

这些原则可以帮助开发者设计出高质量的面向对象代码,并促进代码的可维护性和可扩展性,提高代码的复用度。

⭐结束

本文分享到这结束,如有错误或者不足之处欢迎指出!

👍 点赞,是我创作的动力!

⭐️ 收藏,是我努力的方向!

✏️ 评论,是我进步的财富!

💖 感谢你的阅读!

相关推荐
xjt_090110 小时前
基于 Vue 3 构建企业级 Web Components 组件库
前端·javascript·vue.js
我是伪码农10 小时前
Vue 2.3
前端·javascript·vue.js
夜郎king10 小时前
HTML5 SVG 实现日出日落动画与实时天气可视化
前端·html5·svg 日出日落
辰风沐阳10 小时前
JavaScript 的宏任务和微任务
javascript
夏幻灵11 小时前
HTML5里最常用的十大标签
前端·html·html5
冰暮流星11 小时前
javascript之二重循环练习
开发语言·javascript·数据库
Mr Xu_12 小时前
Vue 3 中 watch 的使用详解:监听响应式数据变化的利器
前端·javascript·vue.js
未来龙皇小蓝12 小时前
RBAC前端架构-01:项目初始化
前端·架构
程序员agions12 小时前
2026年,微前端终于“死“了
前端·状态模式
万岳科技系统开发12 小时前
食堂采购系统源码库存扣减算法与并发控制实现详解
java·前端·数据库·算法