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

Electron Forge打包依赖未被包含问题及生产环境依赖配置咨询

问题描述

我基于create-react-app构建Electron应用,主进程使用electron-devtools-installer模块,采用electron-forge进行打包。执行npm run make完成打包后启动应用,出现以下错误:

Error: Cannot find module 'electron-devtools-installer'
但直接运行electron .时无此问题,推测该模块未被纳入打包范围。

虽该模块仅用于开发,可通过逻辑在生产环境忽略,但我想了解:**当生产环境主进程确实需要第三方模块时,如何将依赖纳入打包?**我已将electron-devtools-installer移至package.json的dependencies字段中,但问题仍未解决。

我的package.json配置如下:

{
  "name": "myapp",
  "version": "0.1.0",
  "private": true,
  "homepage": ".",
  "description": "some description",
  "main": "main/init.js",
  "author": "anonymouse",
  "license": "MIT",
  "dependencies": {
    "@testing-library/jest-dom": "^5.16.5",
    "@testing-library/react": "^13.4.0",
    "@testing-library/user-event": "^13.5.0",
    "electron-devtools-installer": "^3.2.0",
    "electron-squirrel-startup": "^1.0.0",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "react-scripts": "5.0.1",
    "web-vitals": "^2.1.4"
  },
  "scripts": {
    "start": "electron-forge start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject",
    "dev": "concurrently -k \"react-scripts start\" \"npm:electron\"",
    "electron": "wait-on tcp:3000 && electron .",
    "package": "react-scripts build && electron-forge package",
    "make": "react-scripts build && electron-forge make",
    "clean:winbuild": "rmdir build /s /q & rmdir out /s /q"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "@electron-forge/cli": "^6.0.0-beta.67",
    "@electron-forge/maker-deb": "^6.0.0-beta.67",
    "@electron-forge/maker-rpm": "^6.0.0-beta.67",
    "@electron-forge/maker-squirrel": "^6.0.0-beta.67",
    "@electron-forge/maker-zip": "^6.0.0-beta.67",
    "concurrently": "^7.4.0",
    "dotenv": "^16.0.3",
    "electron": "^21.1.1",
    "eslint": "^8.25.0",
    "eslint-config-google": "^0.14.0",
    "eslint-config-standard": "^17.0.0",
    "eslint-plugin-import": "^2.26.0",
    "eslint-plugin-n": "^15.3.0",
    "eslint-plugin-promise": "^6.1.0",
    "eslint-plugin-react": "^7.31.10",
    "wait-on": "^6.0.1"
  },
  "config": {
    "forge": "./forge.config.js"
  }
}

我的forge.config.js配置如下:

module.exports = {
  packagerConfig: {
    ignore: [
      /coverage.*/,
      /node_modules.*/,
      /public.*/,
      /src.*/,
      /\.env|\.gitignore|.*bak|eslint.*|package-lock.*|(?<!build.*)\.txt|(?<!build.*)\.md/
    ]
  },
  makers: [
    {
      name: '@electron-forge/maker-squirrel',
      config: {
        name: 'bkkgapp'
      }
    },
    {
      name: '@electron-forge/maker-zip'
    }
  ]
}
解决方法

核心问题定位

你的forge.config.js中packagerConfig.ignore规则包含了/node_modules.*/,这会直接排除整个node_modules文件夹,哪怕依赖在dependencies中也无法被打包进应用,这就是报错的根本原因。

调整打包忽略规则

删除/node_modules.*/这条忽略规则,或者针对性排除不需要的模块(比如dev相关的冗余文件),保留dependencies中的依赖:

module.exports = {
  packagerConfig: {
    ignore: [
      /coverage.*/,
      /public.*/,
      /src.*/,
      /\.env|\.gitignore|.*bak|eslint.*|package-lock.*|(?<!build.*)\.txt|(?<!build.*)\.md/
      // 移除 /node_modules.*/,避免排除所有依赖
    ]
  },
  makers: [
    {
      name: '@electron-forge/maker-squirrel',
      config: {
        name: 'bkkgapp'
      }
    },
    {
      name: '@electron-forge/maker-zip'
    }
  ]
}

额外优化:区分开发/生产环境逻辑

对于electron-devtools-installer这类仅开发环境需要的模块,建议在主进程中通过环境变量判断加载逻辑,同时将其移回devDependencies减少生产包体积:

// main/init.js
if (process.env.NODE_ENV === 'development') {
  const { default: installExtension, REACT_DEVELOPER_TOOLS } = require('electron-devtools-installer');
  installExtension(REACT_DEVELOPER_TOOLS)
    .then((name) => console.log(`Added Extension:  ${name}`))
    .catch((err) => console.log('An error occurred: ', err));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:45:28