32位是因为我需要引入的dm.dll 是32位的
c++ 2017 visualstudio.microsoft.com/zh-hans/tha… 网站下载 python 3.8.10 32位 node 16.3.0 32位 (ps:高一点版本的32位 我的电脑运行不起来) node-gyp python编写的 将c++库编译为可执行的js库 ffi-napi c++写的 可以引入dll格式文件 需要node-gyp编译 winax c++写的 引入COM Windows c++ Node.JS插件,实现COM IDispatch对象包装,类似于script.exe上的ActiveXObject 需要node-gyp编译 electron 15.0.0 需要去github.com/electron/el… 官网查对应的node版本
c++ python node node-gyp 均为全局 需要提前装好环境
报错
- Error: Dynamic require of "file:///D:/2024/autots/vite-project/node_modules/esbuild/lib/main.js" is not supported 把package.json中的type = module 去掉
- 原因:这里是require(esbuild) 所以需要CommonJs
- 解决方案:1.import esbuild from 'esbuild'
-
2.package.json中的type = module 去掉 或者改为commonJs
- node_modules/winax/activex.js:1:39: ERROR: No loader is configured for ".node" files: node_modules/winax/build/Release/node_activex.node
- 原因:文件引入了.node 需要使用插件来处理
- 解决方案:esbuild打包配置加上 loader: { ".node": "file" },
- no native build was found for platform win32 arch=ia32 .....
- 原因:把ffi-napi 包打进去了找不到了
- 解决方案:esbuild打包配置 external: ['electron','ffi-napi'], 加上
- win32 err126
- 原因: const dmreg = ffi.Library('DmReg.dll', { 'SetDllPathA': ['void', ['string', 'int']] }); dmreg.SetDllPathA("D:\2024\autoelectron\vite-project\src\dm.dll",0) 这个路径引用不对
- 解决方案:路径改对就可以了 例子:path.join(process.cwd(), 'DmReg.dll') 同时需要把引用的文件放到打包后的文件夹下 因为是从dist里面启动的
- import _winax.default.Object is not a construtor
- 原因:winax 也被打包了 不能够被打包
- 解决方案:esbuild打包配置 external: ['electron','ffi-napi','winax'], 加上
- /winax/.... NODE_MODULE_VERSION93 This version of Node.js requires
NODE_MODULE_VERSION98 Please try...
- 原因: 原生Node.js模块由Electron支持,但由于Electron具有与给定Node.js不同的 应用二进制接口 (ABI)(由于使用Chromium的 BoringSL 而不是 OpenSSL 等 差异),您使用的原生 模块需要为Electron重新编译 文档地址:www.electronjs.org/zh/docs/lat… 官方说明
- 解决方案:npm install --save-dev @electron/rebuild 执行 npx electron-rebuild -f -w 对应的问题模块(这里是winax)
- npx electron-rebuild -f -w 失败 ffi-napi, Completed: 0[Error: EPERM: operation not permitted
- 原因:程序启动中 没办法删除
- 解决:把所有相关程序关闭即可