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

使用@electron-forge/plugin-webpack打包后node_modules为空的问题

解决Electron Forge Webpack插件打包后node_modules为空的问题

这是因为@electron-forge/plugin-webpack默认会将项目依赖打包进Webpack的bundle文件中,不会直接把整个node_modules目录复制到输出目录。但如果你的项目依赖原生模块、或者有不需要被Webpack打包的第三方包,就需要手动配置让Forge处理这些依赖。以下是具体的解决方法:

1. 配置Webpack externals排除无需打包的依赖

在Webpack的主进程/渲染进程配置文件中,通过externals字段指定不需要被Webpack打包的依赖,Forge会自动将这些依赖复制到输出目录的node_modules中:

// webpack.main.config.js 或 webpack.renderer.config.js
module.exports = {
  // 其他Webpack配置项
  externals: {
    // 示例:排除原生模块或特定第三方包
    'sqlite3': 'commonjs sqlite3',
    'axios': 'commonjs axios'
  }
};

如果需要排除所有非相对路径的模块(即所有第三方依赖),可以用正则简化配置:

externals: [/^[^.]/]

2. 开启Webpack插件的原生模块自动处理

插件内置了原生模块处理逻辑,只需在forge.config.js中开启nativeModules选项,就能自动识别并复制原生模块到正确位置:

// forge.config.js
module.exports = {
  plugins: [
    {
      name: '@electron-forge/plugin-webpack',
      config: {
        // 其他Webpack相关配置
        nativeModules: true
      }
    }
  ]
};

3. 检查package.json依赖分类

确保需要在生产环境中使用的依赖都放在dependencies字段下,而非devDependencies——Forge默认只会复制dependencies中的包。如果确实需要包含开发依赖,可以在packagerConfig中开启对应选项:

// forge.config.js
module.exports = {
  packagerConfig: {
    copyDevDependencies: true
  },
  // 插件配置...
};

4. 配置asarUnpack处理特殊文件

如果某些依赖(比如原生模块)需要放在asar包外部才能正常运行,可以在packagerConfig中指定asarUnpack规则:

// forge.config.js
module.exports = {
  packagerConfig: {
    asarUnpack: [
      '**/*.node', // 所有原生模块文件
      'node_modules/some-native-module/**/*' // 指定某个依赖的所有文件
    ]
  },
  // 插件配置...
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:08:21