欢迎来到我的专题文章:《让C++给node做技术加持》系列。更多内容,持续更新中,欢迎关注。

往期目录:

专题:让C++给node做技术加持(一)环境搭建,项目运行

专题:让C++给node做技术加持(二)-NodeJs调用C++方法

上一章节,我介绍了NodeJs如何与C++进行交互的环境搭建,C++为nodejs提供API,成功实现了双方 的交互。具体细节可移步到第二章节。

NodeJs应用场景

在前端领域,nodejs被应用最广泛的,无非是网站后台。这个时候我们把打包好的.node二进制文件部署到服务器即可。

然后随着nodejs不断发展,桌面端开发也是异常火热。前端圈中以electron为首的桌面应用框架也是琳琅满目。

既然是桌面开发,那肯定有调用操作系统底层的API能力,比如操作数据库,文件读写等,肯定也少了不nodejs支持。

好,前面我们既然能将C++编译好的.node文件给nodejs调用,那是否可以无缝移植到electron项目中来呢?

恩。动手试试就知道了。

首先我们来创建一个electron快速启动的项目,这里就不做演示了,我自己已经创建好了

创建了一个800*600的空窗口,这不是重点

接下来我们在项目根目录下引入我们通过node-gyp rebuild打包好的.node二进制文件

接下来我们来启动下electron,看效果

哦豁,好像启动失败了

//看下面的错误信息,说的好像是版本没匹配对。NODE_MODULE_VERSION 64. This version of Node.js requiresNODE_MODULE_VERSION 76. Please try re-compiling or re-installing

的确是这样的哈,我们的electron中的nodejs使用的v8和普通的nodejs的v8还不太一样,导致正常编译下的.node文件不能被electron使用。

解决问题

接着我们肯定要开始着手解决这个问题了,通过查阅资料,发现在我们在编译C++时针对electron有自己独立的参数。

好了,直接上编译参数了。

node-gyp rebuild --target=8.2.2 --dist-url=https://atom.io/download/electron

--target表示我当前electron的版本为8.2.2 --dist-url表示我们要这个地址下载对应的头文件,这个过程一般很难执行下来。我也是尝试了很多次才搞好的。 我们接下来看下编译过程。

呀!好像翻车了。。

别着急,遇到问题,我们先来看下错误提示。

 'MaybeLocal<:string>' to 'v8::Local<:string> &&' for 1st argument

意思就是我们不能像之前这样

 Local val = String::NewFromUtf8(isolate,str.c_str()); args.GetReturnValue().Set(val);

直接通过Local去接收返回值了,得替换成MaybeLocal<:string>这种数据类型。

好吧,按照提示来呗。

但是我发现,MaybeLocal这种类型是不能直接返回到NodeJs那边去的。Nodejs那边能接受的类型都是通过Local来定义的。

那怎么样?没办法,只有硬着头皮翻下v8的文档了。我找啊找,找啊找,终于,我找到了这个文档,

好像看到了希望啊。MabelLocal有一个方法ToLocalChecked();可以一试了。

好了,我的编译终于成功了。我们copy下.node文件到electron项目中,接着启动下项目

终于成功调用啦。。。

到这,坑算是填好了。

总结

  1. 在做项目,或者为项目做技术调研的时候,难免会入坑,查阅资料去把坑填好,也是我们在技术成长中非常重要的一环。
  2. 这种开发C++本地模块的方式已经不被Nodejs官网推荐了,因为它过度依赖于nodejs版本和electron版本,无法做到一次编写,一次编译。无论是electron还是普通的Nodejs都可以无缝调用。
  3. 为了解决这些痛点,nodejs已经给了开发者新的开发模块,那就是N-API,它就比较灵活了,后面我们接着说它。

下期,柳暗花明,以N-AP模式基于C++开发nodejs模块的春天要来了。

这里是 畅哥聊技术 《让C++给node做技术加持》专题系列文章,更多内容,持续更新中,欢迎关注。

全文完。

electron 打包把node代理服务打包进去_专题:让C++给node做技术加持(三)编译electron本地模块踩坑记相关推荐

  1. 构建node.js基础镜像_在Android上构建Node.js应用程序

    构建node.js基础镜像 by Aurélien Giraud 通过AurélienGiraud 在Android上构建Node.js应用程序-第1部分:Termux,Vim和Node.js (Bu ...

  2. electron 打包把node代理服务打包进去_用 Node.js 官方镜像打包一个 express 服务

    最近感觉确实有必要了解一下 Docker,在 CI/CD 这个阶段很有用,所以记录一下. 先放上 Node.js 的官方 Docker 镜像. Docker Hub​hub.docker.com 需要 ...

  3. Linux系统使用pyinstaller打包pytorch模型疯狂踩坑记(含权重文件和图片等)

    首先,先自学了pyqt5编写界面,编写的过程就下次再说吧. 编写完之后,文件夹中包括权重文件和两张图片.pyinstaller打包不能打包图片和权重文件,百度了好几圈终于知道了,/(ㄒoㄒ)/~~ 然 ...

  4. node php mysql 性能_使用mysql池对node.js(集群)的性能进行基准测试:Lighttpd PHP?

    编辑(2):现在使用db- mysql和generic-pool模块.错误率显着下降,徘徊在13%,但吞吐量仍然在100 req / sec左右. 编辑(1):在有人建议ORDER BY RAND() ...

  5. code block怎样导入整个文件夹_按需分配随时可用的在线开发环境:弹性容器+code-server踩坑记...

    需求整理 微软在19年的build大会上公开了Visual Studio Online,相当于把Visual Studio Code和我们需要的开发相关文件装进了浏览器,随时访问.不过目前的公共预览版 ...

  6. Notadd 2.0 全新 Node.js 版本~ (开发中) [从 PHP 到 node 的踩坑记]

    对于 Notadd 我们本来期望它实现更多...  尽管我们也尝试做了很多努力,但是由于 PHP 本身的局限,以及考虑到开发环境配置的复杂程度,最终使用了折中方案. 接下来,我们谈谈整个技术选型历程, ...

  7. 小程序统一服务消息_[miniblog]小程序订阅消息踩坑记

    有阵子没有更新我的mini-blog了,这次把推送消息那块做了些改动,小程序的模板消息即将废弃,订阅消息终于来了. 关于订阅消息 订阅消息分为一次性订阅和长期订阅,长期订阅就不说啦,不是个人号可以染指 ...

  8. 东八区转为0时区_踩坑记 | Flink 天级别窗口中存在的时区问题

    ❝ 本系列每篇文章都是从一些实际的 case 出发,分析一些生产环境中经常会遇到的问题,抛砖引玉,以帮助小伙伴们解决一些实际问题.本文介绍 Flink 时间以及时区问题,分析了在天级别的窗口时会遇到的 ...

  9. android小程序_小程序踩坑记

    小程序踩坑记 希望这个文章能尽量记录下小程序的那些坑,避免开发者们浪费自己的生命来定位到底是自己代码导致的还是啥神秘的字节跳变原因. 前记 小程序大多数坑是同一套代码在不同平台上表现不一致导致的,微信 ...

最新文章

  1. 奉劝程序员们:写再多代码,还不如提升这两大能力有价值!
  2. Apache htaccess的简单总结,以及参数的使用
  3. RTX5 | 消息队列02 - 放入与取出消息
  4. appsetting mysql_给IConfiguration写一个GetAppSetting扩展方法(示例代码)
  5. 关于websocket 在生产环境中遇到的问题 及 解决办法
  6. FISCO BCOS源码(4)第三方依赖和模块
  7. linux进程互斥等待
  8. 20200123每日一句
  9. 吉利博越L为何被称为新三好SUV
  10. DirectShow Samples
  11. 【单片机】按键消抖及原理(硬件和软件方法详解)
  12. Android拦截电话与短信(电话拒接/短信拒收)
  13. 面向对象的程序设计C++课堂复盘总结 C语言复习+C++基础语法
  14. JS正则表达式-附身份证号码验证(简易版)
  15. [数学理论]最大熵模型
  16. UI设计电脑配置要求,UI设计笔记本可以吗?
  17. 春招实习汇总(7个offer)
  18. linux Deploy 安装debian
  19. 用Python绘制分子结构
  20. 新冠病毒中招|第一天

热门文章

  1. 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
  2. CDH kafka JMX 启动
  3. 超大福利 | 这款免费 Java 在线诊断利器,不用真的会后悔!
  4. 疫情宅家促生“囤货经济”,北美零售业极限应考
  5. Kubenetes 监控一站式解决方案:阿里云 Prometheus 免费公测
  6. 用AI说再见!“辣眼睛”的买家秀
  7. ECS 按量付费VPC实例停机不收费FAQ
  8. 完全无人驾驶量产车Apollo Moon威马版首秀 成本降一半、能力翻10倍
  9. 程序员工作3年只涨2千,你不知道程序员有多难!
  10. 清华硕士一针见血:这些才是机器学习必备的数学基础