You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React+Electron打包时bg.jpg资源加载失败问题求助

Fixing "net::ERR_FILE_NOT_FOUND bg.jpg" in Packaged Electron Apps

Hey there! Let’s figure out why your bg.jpg goes missing when you package your Electron app (but works perfectly with an Express server). The core issue boils down to how your app resolves resource paths—when running via a server, paths are relative to the server root, but packaged apps use the file:// protocol, so we need to adjust how we handle static assets and load our app.

Step 1: Add Webpack Rules for Static Assets (Images)

Your current Webpack config only handles JS and CSS, so images like bg.jpg aren’t being bundled or assigned correct paths. Let’s add a rule to process image files:

Update your webpack.config.js module rules with this:

module.exports = (env) => {
  // ... existing code ...
  return {
    // ... existing config ...
    module: {
      rules: [
        // ... existing JS/CSS rules ...
        {
          test: /\.(png|jpg|jpeg|gif|ico)$/,
          use: [
            {
              loader: 'file-loader',
              options: {
                name: '[name].[ext]',
                outputPath: 'assets/images/', // Places images in public/dist/assets/images
                publicPath: 'dist/assets/images/' // Correct path for both dev and production
              }
            }
          ]
        }
      ]
    },
    // ... rest of config ...
  };
};

This tells Webpack to copy your images to the dist/assets/images folder and replace any image references in your code with the correct relative path.

Step 2: Load Local HTML in Production Mode

Right now, your Electron app always loads from http://localhost:3000—but when packaged, there’s no server running. We need to switch to loading the local index.html file in production:

Modify the createWindow function in your Electron index.js:

function createWindow() {
  // ... existing code ...
  const isDev = process.env.NODE_ENV === 'development';
  
  // Replace the hardcoded loadURL with this:
  if (isDev) {
    mainWindow.loadURL('http://localhost:3000/public/index.html');
  } else {
    // Load local index.html from the packaged app's file system
    mainWindow.loadURL(`file://${path.join(__dirname, 'public', 'index.html')}`);
  }
  // ... rest of createWindow code ...
}

Step 3: Reference Images Correctly in Your Code

Make sure you’re importing/requiring images in your JS/CSS instead of using hardcoded paths. For example, in a React component:

// Import the image
import bgImage from './assets/images/bg.jpg';

// Use it in your styles
const styles = {
  backgroundImage: `url(${bgImage})`
};

Webpack will automatically replace bgImage with the correct path after bundling.

Step 4: Ensure All Assets Are Included in the Package

When using electron-packager, double-check that your public directory is included in the packaged app. A sample packager command might look like this:

electron-packager . YourAppName --platform=win32 --arch=x64 --out=dist --overwrite --ignore="node_modules" --extra-resource="./public"

This ensures the public folder (with your bundled dist directory and images) is part of the final app package.

Why This Works

  • Webpack now handles image assets, copying them to the right location and updating references.
  • Electron loads the local index.html in production, so all resource paths are resolved relative to the app’s file system instead of a server.
  • The packager command ensures all necessary files are included in the final build.

Give these steps a try, and your bg.jpg should load correctly in the packaged app!

内容的提问来源于stack exchange,提问作者Mohamed Aarab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:44:05