使用 vite-plugin-dynamic-base 实现运行时动态设置上下文路径

我们一般会在编译之前设置上下文,那么如何在编译之后动态设置上下文的路径?

本文使用的技术栈是 Go(Gin) + Vue.js(Vite)

本文使用到的第三方包:https://github.com/chenxch/vite-plugin-dynamic-base

配置 vite.config.ts

typescript 复制代码
import { dynamicBase } from 'vite-plugin-dynamic-base'

export default defineConfig({
  // base: "/",
  base: process.env.NODE_ENV === "production" ? "/__dynamic_base__/" : "/",
  plugins: [
    dynamicBase({ /* options */ }),
  ],
})

后端动态返回 index.html 的内容,比如我后端使用 golang 实现

在返回内容前,对内容进行了处理,替换 __dynamic_base__ 为动态上下文,并且将 window.__dynamic_base__ 设置为动态上下文

go 复制代码
func replaceRelativePaths(htmlContent string, basePath string) string {
	if basePath == "/" {
		basePath = ""
	}
	htmlContent = strings.ReplaceAll(htmlContent, "/__dynamic_base__/", basePath+"/")
	injection := fmt.Sprintf(`
	<script>
		window.__dynamic_base__ = "%s";
	</script>`, basePath)
	return strings.Replace(htmlContent, "</head>", injection+"</head>", 1)
}

最终效果如下(这里设置的上下文是 /abc):


资源文件的上下文问题解决了,还有一个问题也需要设置上下文,那就是 axios,很简单,只需要读取 window.__dynamic_base__ 就可以了。

typescript 复制代码
const dynamicBase = (window as any).__dynamic_base__ || "";
// 创建 axios 实例
const service = axios.create({
  baseURL: `${dynamicBase}${import.meta.env.VITE_APP_BASE_API}`,
  timeout: 50000,
  headers: { "Content-Type": "application/json;charset=utf-8" },
});

这样我们就实现了,真正意义上的动态设置项目全局上下文

相关推荐
星光开发者11 分钟前
基于决策树随机森林算法的小说推荐系统的设计与实现-计算机毕设【课程设计】78485
vue.js·算法·微信小程序·django·php·课程设计·express
vx_Biye_Design1 小时前
springboot高校选课系统82776-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·课程设计·express
niyongsheng1 小时前
后端零改动,给若依换一套现代化前端
vue.js·开源·node.js
未来之窗软件服务2 小时前
Go 利器 GoReSym:剥离符号恢复 Go 二进制元数据—东方仙盟
开发语言·golang·仙盟创梦ide·东方仙盟
用户9177533718754 小时前
从零封装一个地图组件库:OpenLayers + Vue 的工程化实践
vue.js
雪芽蓝域zzs5 小时前
第7节:多选模式、自定义选项渲染、受控弹窗显隐
vue.js·elementui
念何架构之路5 小时前
zap WriteSyncer与Sink体系
云原生·golang
acd120096 小时前
前端随笔:数据明明变了,Vue 页面就是不更新
前端·javascript·vue.js
vx_Biye_Design6 小时前
springboot一站式旅游管理平台81037-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·课程设计·express·旅游
vx_Biye_Design6 小时前
springboot宠物寄养服务预约与监管系统82684-计算机课程设计、毕业设计
java·vue.js·spring boot·elasticsearch·课程设计·express·宠物