如何将Adapter-Node构建的SvelteKit应用部署到非根路径?
解决SvelteKit部署到非根路径的资源加载问题
你的核心问题是:虽然配置了paths.base: '/dashboard',但直接使用以/开头的绝对路径引用静态资源时,浏览器不会自动拼接base路径,导致请求错误的资源地址。以下是正确的配置和资源引用方式:
一、确认基础配置有效性
你的svelte.config.js里的paths.base配置是正确的,但要明确:这个配置仅影响SvelteKit生成的路由、内置JS/CSS等资源路径,不会自动修正你手写的绝对路径资源。
二、正确引用静态资源
方法1:用$app/paths的base变量拼接路径
导入SvelteKit提供的base变量,手动拼接资源路径:
<script> import { base } from '$app/paths'; </script> <img src={`${base}/images/logo_new.svg`} alt="Logo">
方法2:直接导入静态资源(推荐)
将静态资源放在src/lib目录下(或通过kit.files.assets自定义目录),直接导入文件,SvelteKit会自动处理路径含base路径,同时支持类型检查和构建优化:
<script> import logo from '$lib/images/logo_new.svg'; </script> <img src={logo} alt="Logo">
三、验证构建与启动流程
- 执行
npm run build完成生产构建 - 运行
node build启动服务,无需额外配置路径,SvelteKit会依据paths.base自动处理路由与资源映射
额外注意事项
- CSS中的背景图等资源,同样需要用
base变量拼接,或通过导入方式引用 output.globalObject配置与路径问题无关,无特殊兼容性需求可移除
内容的提问来源于stack exchange,提问作者Alok
相关产品推荐
相关产品推荐

