Electron/Svelte项目中如何正确引用打包后的assets静态资源?
静态资源存放与引用方案
你在Svelte组件中打印__dirname输出public路径是Svelte模板的默认行为,所有编译后的前端静态资源都会以public目录作为服务根路径,assets文件夹的存放位置根据资源使用场景选就行:
- 不需要构建处理、运行时通过固定路径读取的资源(比如全局配置JSON、大尺寸媒体文件、不需要压缩重命名的静态内容):直接放到
public目录下。引用时直接写根路径即可,比如public下存放assets文件夹,图片引用路径写/assets/xxx.png,读取JSON直接用fetch('/assets/xxx.json')即可。Electron-Builder打包时会完整保留public目录的结构,不会出现生产环境路径失效的问题。 - 需要构建工具处理的资源(比如组件内复用的小图标、需要压缩/哈希缓存的样式图片、需要模块化引入的配置文件):可以留在
src/assets目录下,通过ES模块相对路径导入即可,示例代码:
<script> import appIcon from './assets/icon.png' import appConfig from './assets/config.json' </script> <img src={appIcon} alt="应用图标" /> <p>版本号:{appConfig.version}</p>
这类资源在执行构建时,会被Rollup/Vite自动处理路径、压缩、生成哈希文件名,最终输出到public的构建产物目录,不需要手动迁移文件。
注意:src目录本身不会被完整输出到编译结果中,所有存放在src下但没有被import引入的文件,构建后都会被丢弃,不要用
__dirname拼接路径读取src下未导入的文件,一定会出现404错误。
Git忽略配置规则
build目录是否加入.gitignore要先区分目录的实际作用:
- Svelte编译生成的
public/build目录:必须加入忽略列表。这个目录的内容是每次执行构建命令自动生成的临时产物,包含编译后的JS、CSS、处理过的静态资源,提交到仓库只会产生无意义的diff,还容易因为本地构建缓存不一致导致线上问题。 - Electron-Builder打包生成的根目录
build/dist目录(存放exe、dmg等安装包的输出目录):必须加入忽略列表。安装包本身体积大,属于可重复构建的产物,不需要纳入版本控制。 - 特殊情况:如果你在根目录新建build文件夹存放Electron-Builder需要的原生资源(比如安装包图标、自定义协议配置、安装侧栏图片等构建依赖的源文件),这个目录属于源码的一部分,不能加入忽略列表,需要正常提交到仓库。
内容的提问来源于stack exchange,提问作者spring
相关产品推荐
相关产品推荐

