umijs / umi

A framework in react community ✨
https://umijs.org
MIT License
15.43k stars 2.66k forks source link

[Bug] publicPath为自定义协议时,开启自动分包后,打包出的index.html中的framework.js导入方式不对 #12670

Closed ShirasawaSama closed 2 months ago

ShirasawaSama commented 3 months ago

What happens?

相关 Issue: #10971 [Bug] window.publicPath 为非标准链接时,替换会出现bug。

publicPath 为自定义协议时,开启自动代码分包后,打包出的 index.html 中的 framework.js 导入方式不对。

需求原因:应用是在自己开发的环境上跑的,采用了特殊的静态资源打包方式,不从网络读取,而是通过自定义协议加速读取。

第一次出现问题的版本: 4.0.35, 因此 4.0.34 之前的版本是正常的

可疑的 commit: https://github.com/umijs/umi/commit/34bf7ef0235ccb322a80c6be7789cdfcbc60887d#diff-26880db4275301a0f7420e3f739568abf3eb791c87cfbe6553d5abed8872d1f9

实际结果

image

预期结果

image

Mini Showcase Repository(REQUIRED)

https://github.com/ShirasawaSama/umi-custom-protocol-public-path-bug

特意把 dist 目录 push 上来了, 可以看 dist 目录里面的 index.html

How To Reproduce

config.ts:

import { defineConfig } from 'umi';

export default defineConfig({
  publicPath: 'myprotocol://example.com/foo/',
  codeSplitting: {
    jsStrategy: 'granularChunks',
  },
})

然后打包生产环境包,即可复现

Context

xierenyuan commented 2 months ago

https://github.com/umijs/umi/blob/master/packages/server/src/scripts.ts#L18 应该是判断非 url 了、自定义协议需要考虑下如何去兼容