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

Electron Forge打包.exe后提示找不到uiohook-napi模块

Electron Forge + Webpack + TypeScript打包后无法加载uiohook-napi的解决方法

问题描述

使用Electron Forge搭配Webpack与TypeScript开发时,uiohook-napi在开发环境运行正常,编译过程也无报错,但运行打包生成的.exe文件时,抛出「Cannot find module 'uiohook-napi'」错误。

环境信息

  • uiohook-napi版本:^1.5.3
  • Node.js:20.9.0,Electron:29.1.5,Electron Forge:^7.3.1
  • 操作系统:Windows x64

当前配置

Webpack主进程配置

import type { Configuration } from "webpack";

import { rules } from "./webpack.rules";
import { plugins } from "./webpack.plugins";

export const mainConfig: Configuration = {
  entry: "./src/index.ts",
  module: {
    rules,
  },
  externals: ["electron", "uiohook-napi"],
  plugins,
  resolve: {
    extensions: [".js", ".ts", ".jsx", ".tsx", ".css", ".json"],
  },
};

已尝试的Electron Forge配置

packagerConfig: {
  asar: {
    unpack: "node_modules/uiohook-napi/**",
    unpackDir: "node_modules/uiohook-napi", // 尝试排除uiohook-napi出ASAR
  },
},

解决方案

1. 修正ASAR解压配置

当前配置中unpack与unpackDir重复,Electron Packager的asar配置无需同时设置两者。调整为以下写法,确保uiohook-napi的所有文件都被解压到ASAR包外:

packagerConfig: {
  asar: {
    unpack: "**/node_modules/uiohook-napi/**/*"
  }
}

unpack的匹配模式需要覆盖uiohook-napi下的所有文件,这样打包后模块文件会被放在unpacked目录中,Electron可以正常读取。

2. 确保原生模块适配Electron版本

uiohook-napi是原生模块,必须针对当前使用的Electron版本编译。执行以下步骤重新编译:

  1. 安装依赖:
    npm install --save-dev electron-rebuild
    
  2. 在package.json的scripts中添加命令:
    "scripts": {
      "rebuild": "electron-rebuild -f -w uiohook-napi"
    }
    
  3. 运行重新编译命令:
    npm run rebuild
    

3. 检查Webpack Externals配置

确认uiohook-napi已添加到主进程的Webpack externals中(你当前的配置已正确设置),因为原生模块不能被Webpack打包,必须保留为外部依赖。注意:uiohook-napi应仅在主进程中使用,不要在渲染进程直接调用。

4. 适配Maker配置(如使用Squirrel.Windows)

如果使用@electron-forge/maker-squirrel等打包工具,需要确保解压后的uiohook-napi文件被正确包含到安装包中。在maker配置中添加额外文件规则:

makers: [
  {
    name: "@electron-forge/maker-squirrel",
    config: {
      extraFiles: [
        {
          from: "node_modules/uiohook-napi",
          to: "node_modules/uiohook-napi",
          filter: ["**/*"]
        }
      ]
    }
  }
]

5. 验证打包后的文件结构

打包完成后,打开输出目录(如out/你的应用名-win32-x64),检查是否存在unpacked/node_modules/uiohook-napi目录,且目录下包含对应的.node原生文件(如uiohook.node)。如果不存在,说明ASAR解压配置未生效,需重新检查packagerConfig。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 23:15:42