记 Valaxy GitHub Pages 部署失败排查记录 #170
YunYouJun
started this conversation in
Show and tell
Replies: 1 comment 4 replies
-
0.16.1版本又开始这样了,一打开就是下载。加上index.html就能访问,但是加载完就会变回原链接,刷新就是下载 |
Beta Was this translation helpful? Give feedback.
4 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
起因
#167 @Seanium 发现 GitHub Pages 下的网站打开时会弹出下载,而非正常访问。
简单记录本次问题的排查与解决方案,以供参考。
结论
先说结论,由于
vite-plugin-vue-layouts
JohnCampionJr/vite-plugin-vue-layouts#27 为适配 vite-ssgdirStyles: nested
风格,对 route.children[0].path 进行了处理。这导致在 flat 模式下构建时会多生成一个名为.html
文件,该文件内容与index.html
完全一致。07039f8
过程
查找原因
经测试,此由于网页响应头
Content-Type: application/octet-stream
所导致,因此猜测由于生成后的index.html
被识别为二进制文件导致。且此时使用相同代码部署的 Vercel/Netlify/Cloudflare Pages 可正常访问。
对于 GitHub Pages 来说,会自动将
html
后缀名的文件识别为Content-Type: text/html
,但现在的表现确是失效了。猜测:html 中存在不标准的字符导致标签闭合而没有被 GitHub 识别为 HTML
(function(){})()
(匿名函数立即执行改为普通脚本)结果:无效
结果:无效
结果:无效
猜测:
.nojekyll
导致(GitHub Pages 默认支持 Jekyll,故存在一些特殊的匹配策略,如没有.nojekyll
时无法访问_
开头的资源文件).nojekyll
猜测:GitHub Pages 目前支持两种部署方案,采用了 GitHub Actions(Beta) 部署导致
测试:尝试拷贝 dist 文件夹内部内容,新建仓库直接部署。
.html
。)这令人百思不得其解。
在不断测试的过程中,又发现了一些其他的表现。
/index.html
可以直接访问本以为和 GitHub 的识别策略有关,但此说明和 Valaxy 的构建产物有关。
v0.14.2...v0.14.3
0.14.2-0.14.3 的变动很少,可以快速看到。
变动中有两部分代码可能导致该问题。
dirStyles
值从nested
改为flat
dirStyles: flat
添加了/
结尾路径的适配逻辑但是
Content-Type
作为响应头在网页加载逻辑前便相应了,理应与此无关。但以防万一,GitHub Pages 提前做了魔法的预渲染之类。if (route.path !== '/' && route.path.endsWith('/'))
测试无效。那么最后一种可能性便是
nested
->flat
。构建两种方式产物,对比根目录内容。此时发现
flat
下会相比nested
多出一个.html
文件,猜测由此导致。删除测试,访问成功。
且该情况只发生在 GitHub Pages,Vercel/Netlify/Cloudflare Pages 等部署的相同站点等可正常访问,故猜测是 GitHub Pages 的特殊策略解析了
.html
且其优先级高于index.html
。解决方案
原因找到,但我们还需找到为何 Valaxy 依赖的 vite-ssg 在
dirStyles: 'flat'
下会生成.html
。查看 vite-ssg 相关关键代码:
前三行的排版有点让人误解因此导致,换个更清晰的写法:
没问题。那么问题可能出在 ssg 过程中用到的其他插件。
测试 vitesse 构建同样存在该问题,会生成
.html
。[...all].vue
用于 catch 404 页面。[...all].vue
.html
,排除vite-plugin-pages
vite-plugin-vue-layouts
对vite-plugin-pages
的路由进行了一层处理。vite-plugin-vue-layouts
的 layout 导致vite-plugin-vue-layouts
相关内容.html
查看 vite-plugin-vue-layouts 路由处理相关代码。
关键词
vite-ssg
nested
等可以找到一个相关 Issue fix path in children | vite-plugin-vue-layouts。查看代码变更:
children: [ {...route, path: ''} ]
导致由于该问题本质来自 vite-plugin-vue-layouts 对 vite-ssg 的适配,可向 vite-plugin-vue-layouts 提 PR 修改。
最终,我创建了 fix: extra .html generated when vite-ssg dirStyles flat | vite-plugin-vue-layouts 以解决该问题。
并通过 07039f8 临时解决 Valaxy 构建的问题。
经验
由于该问题的表现十分玄学,且
.html
与index.html
完全一致,弹出下载时也并不会显示文件名,容易导致开发者将问题的重点放在了index.html
上,而很难发现。在此过程中也存在一些其他值得注意,避免走弯路的经验。Beta Was this translation helpful? Give feedback.
All reactions