electron 调用 dll(动态链接库)因业务原因需要调用dll文件,记录一下踩坑的过程(1)坑一:ffi和ref这两个库不支持node10以上的版本 安装报错信息: - npm ERR! code ELIFECYCLE
- npm ERR! errno 1
- npm ERR! ref@1.3.5 install: `node-gyp rebuild`
- npm ERR! Exit status 1
- npm ERR!
- npm ERR! Failed at the ref@1.3.5 install script.
- npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
复制代码解决方案:用ffi-napi和ref-napi这两个库进行替代 贴上安装代码 - npm i ffi-napi
- npm i ref-napi
复制代码(2)坑二:安装 windows-build-tools卡在Successfully installed Python 2.7 描述: node-gyp和windows-build-tools是动态库的构建工具 安装报错:卡在Successfully installed Python 2.7不动
解决方案:在用户数据文件夹%USERPROFILE%\ AppData \ Local \ Temp创建一个名为dd_client_.log的文件,编辑该文件,加入一行Closing installer. Return code: 3010.然后保存
(3)坑三:python版本不对导致安装依赖库失败 解决方案:切换python版本
(4)坑四:ref-array不支持node10以上的版本 用途:ref-array该模块使用 ref“type”接口在 Node.js 缓冲区之上提供“数组”实现(简单来说就是入参或返回值是数组时用到) 安装报错信息: - npm ERR! code ELIFECYCLE
- npm ERR! errno 1
- npm ERR! ref@1.3.5 install: `node-gyp rebuild`
- npm ERR! Exit status 1
- npm ERR!
- npm ERR! Failed at the ref@1.3.5 install script.
- npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
复制代码解决方案:用ref-array-di这个库进行替代 贴上安装使用代码 - const ref = require('ref-napi')
- const refArray = require('ref-array-di')(ref)
- refArray('string')
复制代码(5)坑五:调用的dll还有其他依赖dll,没有全部拷进去项目导致的报错,这个错误比较明显,在报错信息里就可以看出来(6)坑六:Dynamic Linking Error: Win32 Error 126 解决方案:vue.config.js中添加externals配置 - module.exports = {
- ...,
- pluginOptions: {
- electronBuilder: {
- preload: 'src/preload.js',
- // 配置
- externals: ['ffi-napi', 'ref-napi'],
- }
- }
- }
复制代码(7)坑七:子进程/工作线程 开发环境找得到模块,electron打包后生产环境找不到模块cannot find module XXX 原因:子进程/工作线程和主进程具有不同的执行环境和工作目录
解决方案:安装对应模块并设置asarUnpack - pluginOptions: {
- electronBuilder: {
- preload: 'src/preload.js',
- // 配置
- externals: ['ffi-napi', 'ref-napi'],
- builderOptions: {
- // 指定创建asar存档时要解压的文件,解决合成子线程的依赖包找不到的问题
- asarUnpack: [
- './node_modules/ffi-napi/**/*',
- './node_modules/ref-napi/**/*',
- './node_modules/debug/**/*',
- './node_modules/ms/**/*',
- './node_modules/node-gyp-build/**/*',
- './node_modules/ref-struct-di/**/*',
- ],
复制代码配置后依赖包的放置位置
(8)坑八:使用node子进程spawn打包后提示需要node环境 解决方案:改用fork - const child = fork(childProcessPath, [], {})
复制代码(9)坑九:使用node工作线程worker.terminate()停止线程后electron应用直接闪退 原因:electron框架bug,估计已解决,但版本不能轻易更换
解决方案:改用node子进程
|