3、终于在electron中成功编译node-serialport了

闲言碎语

😎

electron是一个使用Js来做桌面应用的的玩意,大名鼎鼎的vs code就是用这货做出来的。

node-serialport是一个可以用来访问电脑上串口的node.js包

Node.js package to access serial ports for reading and writing. Welcome your robotic JavaScript overlords. Better yet, program them!

作为一个只会C语言的渣渣,为了在electron上使用node-serialport折腾了我好一段时间😤。主要原因是node-serialport是一个原生库,使用的时候需要编译。而electron有自身的node.js环境,原生库在上面运行之前需要重新编译。这个编译过程会从网上下载一堆依赖,也就是因为网络原因这个过程总会失败。。。。。。

就在写这篇文章的今天,无意间百度到了解决方法😅。之前一直用 electron serialport这样的关键词,今天不知道那个抽了哪个筋,改用关键词 electron 原生模块 找到了这篇文章,里面提到了使用淘宝代理。cnpm我知道,但是万万没想到淘宝代理也有electron的镜像😂。

怎么做

本文假设你已经能使用node-serialport了,没有的话,还请移步这里。使用这个模块的时候十有八九需要重新编译的,因此需要安装node-pre-gyp,如果是Windows用户,可以看这里node-gyp installation。这个环境也有的折腾的。不是本文的重点,不提太多🙄。

node-pre-gyp建议采用全局安装,这样可以在cmd上面使用。

另外,好像npm上面的serialport有点问题,建议到GitHub上下载个源码在本地安装。

cnpm install electron --save-dev

当然可以使用cnpm install electron@1.6.2 --save-dev来指定版本,这里使用了1.6.2这个版本的electron。

安装本地的node-serialport包需要使用npm,npm install node-serialport本地路径

安装完之后,大头的工作才开始,如果顺利的话可以一次通过。先将目录定位到node-serialport。可以使用命令行cd .\\node_modules\\serialport\\
然后在使用这条命令行来编译
node-pre-gyp rebuild --target=1.6.2 --arch=x64 --target_arch=x64 --dist-url=https://npm.taobao.org/mirrors/atom-shell

最近在使用electron的时候,发现不用淘宝镜像也可以成功,建议先试一下这个,不行再换淘宝的。
node-pre-gyp rebuild --target=1.6.2 --arch=x64 --target_arch=x64 --dist-url=https://atom.io/download/electron

其中 --target=1.6.2用来指定electron的版本,--arch用两种选择ia32或者x64,--dist-url指定下载头。

强调

为了保证可以成功,先保证可以在node.js上面成功使用node-serialport!!!

这里提到了node-pre-gyp和node-gyp,两者什么区别我也不清楚。在Windows下编译原生库好像需要vs的一些东西,由于我的电脑上先前安装了vs2015。我只安装了node-pre-gyp和py2.7(py3不支持,只能用2.7),然后就可以成功编译和使用node-serialport。

这这个过程如果报错了,看看是不是有什么404。如果有十有八九是网络问题😅。

最后一步

如果你顺利的话,就来到了最后一步。激动人心的一步。

暂时没有用GitHub,只能贴代码了。

下面是package.json的内容

{
  "name": "electron_serialport",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "preinstall": "npm install .\\node-serialport-master",
    "postinstall": "cd .\\node_modules\\serialport\\ && node-pre-gyp rebuild --target=1.6.2 --arch=x64 --target_arch=x64 --dist-url=https://npm.taobao.org/mirrors/atom-shell" 
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "electron": "^1.6.2"
  }
}

这里使用了脚本,可以使用npm install来安装需要的包并编译serialport包。请到GitHub上下载node-serialport-master并解压到工程文件夹下面。

接着是index.js的内容

const {app, BrowserWindow, dialog} = require('electron')

const path = require('path')
const url = require('url')

let win;

app.on('ready', () => {
    
    win = new BrowserWindow()

    win.on('close', () => {
        win = null;
    })

    win.loadURL(url.format({
        pathname: path.join(__dirname, 'index.html'),
        protocol: 'file',
        slashes: true
    }))

    win.webContents.openDevTools();
})

app.on('window-all-closed', ()=> {
    app.quit();
})

然后是count.js的内容,serialport有关的代码就在这里。

const Serialport = require('serialport');

Serialport.list((err, ports) => {
    ports.forEach((port) => {
        console.log(port.comName);
    });
});


let cnt = 0;

setInterval(() => {
    document.getElementById('cnt').textContent = cnt;
    cnt++;
}, 1000)

最后是index.html

<!doctype html>
<html>
    <head>
        <title>electron</title>
    </head>
    <body>
        <h1>
            Hello electron!
        </h1>

        <div id = "cnt"></div>
    </body>
    <script>require('./count.js')</script>
</html>

这个项目的目录结构是这样的,


目录结构

好运!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容