vue3在public下封装config.js自定义配置动态数据,可在打包后直接修改,方便后端部署及后续维护

前端项目打包后,后端或维护人员可直接在dist中修改配置内容,一键更新项目,不需要重新编译,推荐用于请求地址、外链资源、主题风格、前后端数据对照等需要动态调整的场景

一、封装配置文件

  1. public下新建文件config.js,自定义配置数据(约定键名大写,仅可修改数据值):
javascript 复制代码
/* public/config.js */
window.customConfig = {
  // API 基础 URL(+请求端点)
  VUE_APP_BASE_API: "https://your-production-api.com",
  // API 请求端点
  VUE_APP_API_ENDPOINT: "/endpoint",
  // API 请求超时(毫秒)
  VUE_APP_API_TIMEOUT: 10000,
  // 添加更多项目......
  ERR_CODES: {
    NOT_FOUND: 404,
  },
}
  1. index.html中优先引入配置文件:
html 复制代码
<!-- public/index.html -->
<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <!-- 优先引入配置文件 -->
    <script src="<%= BASE_URL %>config.js"></script>
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title><%= htmlWebpackPlugin.options.title %></title>
  </head>
  <body>
    <noscript>
      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>
  1. main.js中挂载配置到全局:
javascript 复制代码
/* src/main.js */

// 确保 config.js 加载成功
if (typeof window !== "undefined" && window.customConfig) {
  // 定义为全局属性后可在组件中使用 this.$config 获取
  app.config.globalProperties.$config = window.customConfig
} else {
  console.warn("window.customConfig is not defined!")
}

二、获取配置内容

  • 组件中获取(示例):
javascript 复制代码
/* example.vue */

if (this.$config) {
  window.open(this.$config.VUE_APP_BASE_API + this.$config.VUE_APP_API_ENDPOINT)
}
  • 其他配置文件中获取(示例):
javascript 复制代码
/* src/api/index.js */

// 确保 config.js 加载成功
const config = () => {
  if (typeof window !== "undefined" && window.customConfig) {
    return window.customConfig
  }
}
// 应用自定义配置
const axios = require("axios").default
const instance = axios.create({
  baseURL: config ? config.VUE_APP_BASE_API + config.VUE_APP_API_ENDPOINT : "https://example-api.com/endpoint",
  timeout: config ? config.VUE_APP_API_TIMEOUT : 15000,
})
相关推荐
Asize8 小时前
AI 协作开发新范式:我用 SDD 做了个排版 npm 包
前端·人工智能
kyriewen9 小时前
我把今年流传的前端 AI 面试题整理了一遍——4 类场景题+回答框架(附速查表)
前端·面试·程序员
计算机魔术师10 小时前
国产多模态模型正面硬刚Opus旗舰:差距从30%缩到3%
前端
风骏时光牛马10 小时前
程序员进阶:深度思考,解锁职场成长的底层逻辑
前端
IT_陈寒10 小时前
用了Proxy才发现以前的JavaScript白写了
前端·人工智能·后端
爱丶不疚11 小时前
Eval: Agent 说的 Eval 是什么?从单测、TDD 到 Sentry 聊起
前端·ai编程·vibecoding
求道於盲11 小时前
python中的类型标注
前端
计算机魔术师11 小时前
从硅谷测试到全球铺开,ChatGPT广告的10亿美元秘密
前端
专业抄代码选手12 小时前
08|Fiber 上的 `useState`:状态终于属于具体组件
前端·javascript·react.js
默_笙12 小时前
😭 Vibe Coding 翻车实录:AI 编程为什么必须先写"剧本"
前端·javascript