Electron打包Node程序:NODE_MODULE_VERSION值不一致引发的问题。(1)

由于项目的要求,需要用到Electron+Node。Electron确实有很多坑,刚接触的时候,遇到了各种各样的问题,不过最终都一一解决了。

一些常见的问题,网上都有相应的资料,这里就不介绍了。

 首先看一张图,介绍Electron、Node使用不同的Chrome内核:

 

由于chrome内核不同,需要编译成一致的,才能让node程序运行在Electron上,而网上推荐的最常用的编译工具为electron-rebuild,在使用Node-Serialport读取本机串口的时,使用"./node_modules/.bin/electron-rebuild.cmd"编译之后,就能解决问题。

 

但是在使用node-ffi读取dll时,遇到了以下的问题,本篇文章将围绕这个问题探讨以下解决方案:

NODE_MODULE_VERSION指的是Node.js的ABI(application binary interface)版本号,用来确定编译Node.js的C++库版本,以确定是否可以直接加载而不需重新编译。在早期版本中其作为一位十六进制来储存,而现在表示为一个整数。

 

查看Electron版本文档库中,发现有这么一句话:Change the NODE_MODULE_VERSION to 69

问题原因终于找到了,但是怎么解决?问题分析到这种程度,可以得出两种解决方案:

1) 选取Node版本与Electron版本的NODE_MODULE_VERSION一致。(由于没有找到electron各个版本对应的NODE_MODULE_VERSION,这里可以稍后研究一下)

2)依据electron-rebuild的思路,把二者转换成一致。在rebuild的时候,指定一下abi的值不就可以了?查了一下这方面的资料,发现才真能指定abi的值。

      "rebuild": "cnpm rebuild --runtime=electron --target=4.0.5 --disturl=https://atom.io/download/atom-shell --abi=69"

      运行成功。同时解决了Node-Serialport串口读取,也能解决Node-ffi读取dll。

 

像需要python2.7x、vc++、.net  framework2.0等的配置就不啰嗦了,查一下资料即可,最后附带一张package.json配置以及都需要全局安装哪些库:

新手入门,会遇到各种各样的问题,但最终总有解决的办法。

 

转载于:https://www.cnblogs.com/mdorg/p/10417945.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 `electron-builder` 来打包 Electron 应用,并将 Node.js 服务一起打包进去。 以下是一个使用 Node.js 官方镜像打包一个 Express 服务的示例: 1. 首先,安装 `electron-builder`: ```bash npm install electron-builder --save-dev ``` 2. 然后,在项目根目录下创建一个 `build` 目录,并在其中创建一个 `index.js` 文件,用于启动 Express 服务: ```javascript const express = require('express') const app = express() app.get('/', (req, res) => { res.send('Hello World!') }) app.listen(3000, () => { console.log('Example app listening on port 3000!') }) ``` 3. 在项目根目录下创建一个 `package.json` 文件,用于配置打包相关信息: ```json { "name": "electron-express", "version": "1.0.0", "main": "main.js", "scripts": { "start": "electron .", "build": "electron-builder" }, "dependencies": { "electron": "^12.0.0", "express": "^4.17.1" }, "devDependencies": { "electron-builder": "^22.10.5" }, "build": { "appId": "com.example.electron-express", "productName": "Electron Express", "directories": { "output": "dist" }, "files": [ "build/**/*", "package.json" ], "extraResources": [ { "from": "node_modules/express/**/*", "to": "app/node_modules/express" } ], "mac": { "category": "public.app-category.developer-tools", "target": { "target": "default", "arch": [ "x64" ] } }, "win": { "target": { "target": "nsis", "arch": [ "x64" ] } } } } ``` 在 `package.json` 文件中,我们指定了 `express` 和 `electron-builder` 作为依赖项,并将 `build` 目录中的文件和 `package.json` 文件包含在打包文件中。我们还使用 `extraResources` 属性将 `express` 模块包含在 Electron 应用程序中。 4. 最后,在项目根目录下创建一个 `main.js` 文件,用于启动 Electron 应用程序Node.js 服务: ```javascript const { app, BrowserWindow } = require('electron') const path = require('path') const url = require('url') let mainWindow function createWindow() { mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true } }) mainWindow.loadURL('http://localhost:3000') mainWindow.on('closed', function () { mainWindow = null }) } app.on('ready', createWindow) app.on('window-all-closed', function () { if (process.platform !== 'darwin') { app.quit() } }) app.on('activate', function () { if (mainWindow === null) { createWindow() } }) const express = require('./build/index') express() ``` 这个文件启动 Electron 应用程序并加载 `http://localhost:3000` 这个 URL,在应用程序启动后会自动开始运行 `index.js` 文件中定义的 Express 服务。 5. 最后,在命令行中执行 `npm run build` 命令,即可将 Electron 应用程序Node.js 服务一起打包为可执行文件。 打包完成后,在 `dist` 目录下可以找到打包好的可执行文件。运行该文件即可启动 Electron 应用程序并访问 Express 服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值