如何动态配置前端contextpath路径

常见的前端包部署为前端执行npm run build后,打包生成的dist包给到运维,运维进行nginx配置进行页面之间的跳转等

若出现多个环境有不同的context path要求,常规都是前端提供多个打包命令,例如:npm run build:dev,npm run build:production,npm run build:test等。根据不同的环境配置不同的打包命令

需求背景:

由于项目甲方提供的服务器配置仅支持配置一个打包命令,而一个包需要分别部署在不同的环境上Url1:xxxx/blue/index.html、Url2:xxxx/green/index.html

实现思路:

1.前端静态资源环境得成相对路径

2.想办法获取到当前部署环境,在html中创建base,并且href值为当前部署环境地址

实现代码:

在index.html中插入以下片段:

 <script>
    // 获取当前路径并动态设置 base 路径
    (function () {
      if (window.useDynamicBase) {
        let base = document.createElement('base');
        let path = window.location.pathname;
        // 通过正则的方式匹配当前url的路径,例如:/admin/index.html 会匹配出 ['/admin/','admin']
        let contextPath = path.match(/^\/([^\/]+)\//);
        // 取第1位目录较准确
        base.href = contextPath ? `/${contextPath[1]}/` : '/';
        document.head.appendChild(base);
      }
    })();
  </script>

实现结果:

当路径为根时:

当路径为:xxxx/blue/#/welcome时:

PS:由于当前为hash模式,只会截取域名以及在#之前的url,但是如果为history模式时就会导致,当跳转到某一个页面时,就会获取某个页面的Url作为base的href值,所以当前的修改方案仅获取contextPath[1]的。(若后续有多级域名需就此继续修改)

let contextPath = path.substring(0, path.lastIndexOf('/') + 1);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值