如何将使用adapter-static的SvelteKit项目部署到GitHub Pages?
SvelteKit 部署 GitHub Pages 静态资源404解决方案
你遗漏的核心必要配置是kit.paths.base路径前缀配置,这是部署到GitHub Pages非根域名项目页的必填项。
核心配置修正
如果你的站点访问地址是https://<GitHub用户名>.github.io/<仓库名>/格式(即非<用户名>.github.io根域名站点的普通项目托管),需要在svelte.config.js的kit配置块中补充路径前缀配置,其他原有配置可以保留:
import adapter from '@sveltejs/adapter-static'; /** @type {import('@sveltejs/kit').Config} */ const config = { kit: { adapter: adapter({ pages: 'build', assets: 'build', fallback: null, precompress: false }), // 补充paths配置,生产环境自动匹配仓库名前缀,开发环境保持根路径 paths: { base: process.env.NODE_ENV === 'production' ? '/你的仓库名' : '' }, appDir: 'app', prerender: { default: true, }, trailingSlash: 'always', } }; export default config;
配置原理
本地执行preview命令时,站点默认运行在服务器根路径/下,所有静态资源引用路径都是/app/xxx.js、/app/xxx.css格式,所以本地访问完全正常。但部署到GitHub Pages项目页时,站点的实际根路径是/你的仓库名/,浏览器请求根路径下的资源自然会返回404。添加paths.base配置后,生产构建时SvelteKit会自动给所有资源引用、页面跳转路径加上对应前缀,匹配GitHub Pages的实际访问路径。
其他注意事项
.nojekyll文件需要放在构建输出的build目录根下才会生效,不需要手动在构建后复制,直接在项目源码的static目录下创建空的.nojekyll文件即可,SvelteKit构建时会自动将static目录下的所有文件原样复制到输出目录。- 配置
.nojekyll后可以将appDir改回默认值_app,GitHub Pages检测到该文件后会跳过Jekyll处理,不会拦截下划线开头的目录资源。 - 本地验证部署效果时,可以执行带base参数的预览命令模拟线上路径:
npm run preview -- --base /你的仓库名,该环境下访问正常则部署后不会出现资源路径问题。
内容的提问来源于stack exchange,提问作者Corrl
相关产品推荐
相关产品推荐

