Electron Forge vite-typescript插件中静态图片无法渲染的问题求助
我现在在用Electron Forge的vite-typescript插件开发桌面应用,想给dApp加几张图片,但就是渲染不出来,一直报错Failed to load resource: net::ERR_FILE_NOT_FOUND。我的项目结构是这样的:
project │ README.md │ index.html │ next.config.js │ forge.config.ts │ forge.env.d.ts │ package.json │ postcss.config.js │ tailwind.config.js │ tsconfig.json │ vite.base.config.ts │ vite.main.config.ts │ vite.preload.config.ts │ vite.renderer.config.ts └─── public │ │ image1.jpg │ │ image2.jpg │ │ index.css └───src │ _app.tsx │ index.tsx │ main.js │ preload.js │ renderer.ts
图片都放在public文件夹里,按照Vite的规则,public里的文件应该会自动复制到应用根目录的。我在index.tsx里是这么引用图片的:
<div><br></br> <center> <img style={{ borderRadius: '5%' }} src="/image1.jpg" width="500px" height="300px"/> </center> </div>
但是执行npm run start之后,我的资源里根本没有这些图片,而且我发现.vite文件夹在执行npm run start或者npm run make的时候都没更新,会不会是这个导致的问题啊?
给你几个排查和解决的方向:
确认Vite渲染器的public目录配置
先打开你的vite.renderer.config.ts,看看有没有明确指定publicDir,有时候Electron Forge的Vite插件需要手动配置这个路径才能正确识别public文件夹:import { defineConfig } from 'vite'; export default defineConfig({ // 其他已有配置... publicDir: './public', });检查打包后的资源是否存在
执行npm run make之后,去项目根目录的out文件夹里看看打包后的应用目录,确认public里的图片是不是被复制过去了。如果没找到,那大概率是Forge的打包配置有问题,检查下forge.config.ts里的packagerConfig有没有不小心排除了public文件夹,或者makers配置有没有遗漏资源的情况。调整图片引用路径
在Electron的渲染进程里,直接用根路径/image1.jpg有时候会因为路径解析的问题失效,你可以试试这两种方式:- 用相对路径:比如
../public/image1.jpg(根据index.tsx的位置调整层级) - 用Vite的环境变量拼接路径:
<img src={`${import.meta.env.BASE_URL}image1.jpg`} style={{ borderRadius: '5%' }} width="500px" height="300px"/>
- 用相对路径:比如
清理缓存重新构建
手动删掉.vite和out文件夹,然后重新执行npm run start,有时候旧的缓存会导致资源不更新,清空后再构建应该能解决这类问题。确认脚本命令的正确性
检查下package.json里的start和make命令是不是用的Electron Forge的官方脚本,比如应该是"start": "electron-forge start"和"make": "electron-forge make",如果用的是单独的vite命令,可能会跳过Forge的资源打包流程,导致图片没被包含进去。
备注:内容来源于stack exchange,提问作者Akanksha Atrey

