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

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

3203f175c5c0ab8faa8bbe0e6c11acfd.png

往期目录:

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

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

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

NodeJs应用场景

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

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

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

7557806229f1d79c848cbd8213d95bab.png

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

恩。动手试试就知道了。

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

79917a557ae445f0a2d1d0788e6624c0.png

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

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

9e7f862d139ecc4dd947976812114595.png

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

21725e621b0826935606687a857ccbaf.gif

哦豁,好像启动失败了

//看下面的错误信息,说的好像是版本没匹配对。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表示我们要这个地址下载对应的头文件,这个过程一般很难执行下来。我也是尝试了很多次才搞好的。 我们接下来看下编译过程。

aba134deef23851e69efa3cd2e42a24d.gif

呀!好像翻车了。。

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

 '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的文档了。我找啊找,找啊找,终于,我找到了这个文档,

6681a5a53db99775d34a3428f0507edf.png

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

94dfeba2ca26042bc7e5a1a028962a43.gif

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

8c9721432447bc4dc2102570a9a17110.gif

终于成功调用啦。。。

到这,坑算是填好了。

总结

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

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

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

全文完。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522186.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云无边界,阿里云混合云数据同步发布

摘要&#xff1a; 针对不同数据库间数据实时同步难的问题&#xff0c;日前&#xff0c;阿里云宣布推出混合云数据同步一站式解决方案&#xff0c;便于广大云产品用户实现实时数据同步的混合云支持&#xff0c;更为方便的是&#xff0c;该功能让本地Oracle也能实现与云上数据库的…

fs react 使用 保存文件_入门TypeScript编写React

使用 create-react-app 开启 TypeScriptCreate React App 是一个官方支持的创建 React 单页应用程序的CLI&#xff0c;它提供了一个零配置的现代构建设置。当你使用 Create React App 来创建一个新的 TypeScript React 工程时&#xff0c;你可以运行&#xff1a;$ npx create-r…

快速开发工作流_03_集成在线流程设计器_内置用户免登录

接上一篇&#xff1a;快速开发工作流_02_集成在线流程设计器 https://gblfy.blog.csdn.net/article/details/103676784 文章目录八、内置用户免登录8.1. 定位url-config.js8.2. 替换url8.3. 添加配置类AdminRemoteAccountResource8.4. 启动类排除权限校验8.5. 码云地址八、内置…

强推!阿里数据科学家一次讲透数据中台

戳蓝字“CSDN云计算”关注我们哦&#xff01;来源 | 技术领导力社区编辑 | Emma阿里大数据和人工智能科学家 行在&#xff0c;阿里公共数据平台负责人 罗金鹏&#xff0c;在云栖大会、Data Tech等大会中分享到&#xff1a;阿里的“双中台ET”数字化转型方法论及成果&#xff0c…

关于增强学习你应该了解的五件事儿

摘要&#xff1a; 本文主要是讲解了机器学习中的增强学习方法的基本原理&#xff0c;常用算法及应用场景&#xff0c;最后给出了学习资源&#xff0c;对于初学者而言可以将其作为入门指南。 强化学习&#xff08;Reinforcement Learning&#xff09;是当前最热门的研究课题之一…

SpringBoot聚合项目总结

文章目录一、聚合项目架构二、依赖传递图解2.1. 常见场景2.2. 企业场景三、结构设计原则3.1. 模块层次清晰3.2. 模块之间耦合度低3.3. 功能互不影响3.4. 定位问题效率高3.5. 灵活易扩展四、架构设计优点4.1. 统一规范4.2. 版本统一管理4.2.1. 模块版本统一管理4.2.2. 依赖版本统…

容器精华问答 | 虚拟机和容器的区别是什么?

戳蓝字“CSDN云计算”关注我们哦&#xff01;云计算的发展日新月异&#xff0c;新技术层出不穷&#xff0c;尤其容器技术自2013年Docker容器问世以来一路高歌猛进红遍大江南北&#xff0c;与虚拟机相比&#xff0c;容器更显优势&#xff0c;有着更轻量、更快捷、占用资源更少&a…

战神笔记本电脑自带access吗_笔记本电脑卡顿不要急着换,这几个方法,让你的电脑流畅爆表...

电脑现在无论是学生还是上班族都成为了不可或缺的一个东西&#xff0c;笔记本电脑更是成为很多人的宠爱&#xff0c;方便携带。但是很多人的电脑都会面临一个问题&#xff0c;就是笔记本电脑使用没多久就开始卡顿&#xff0c;越来越不流畅。 …

一文看清深圳云栖阿里云重磅产品发布

摘要&#xff1a; 成立九年之后&#xff0c;阿里云不再仅仅是提供计算、存储、网络、安全。 事实上&#xff0c;我们每一天都有新功能在发布。 本文就和大家梳理一下&#xff0c;阿里云此次深圳云栖在云计算、大数据、人工智能、物联网方面的技术产品进展。 成立九年之后&#…

工作流实战_23_flowable 任务监听器 事件监听器

项目地址&#xff1a;https://gitee.com/lwj/flowable.git 分支flowable-base 视频讲解地址 https://www.bilibili.com/video/av79328344 监听器 任务监听器 针对userTask节点 事件监听器 针对任意节点 由于实际情况下我们会在节点会动态调用业务系统的接口去改变业务单据的状态…

pcb设计等长线误差_17种元器件PCB封装图鉴,美翻了(附PCB元件库)

元器件封装的构建是PCB设计中的一个重要环节&#xff0c;小小的一个错误很可能导致整个板子都不能工作以及工期的严重延误。常规器件的封装库一般CAD工具都有自带&#xff0c;也可以从器件原厂的设计文档、参考设计源图中获取。封装名称与图形如下No.1晶体管No.2晶振No.3电感No…

云计算风起云涌,超融合恰逢其时!

戳蓝字“CSDN云计算”关注我们哦&#xff01;“关于超融合市场&#xff0c;确实有一些声音。比如说市场很小&#xff0c;着手做这个业务方向会不会意味着未来堪忧&#xff1f;是不是没有前途&#xff1f;”深信服云BG总经理宋锐打趣说道。“这个问题&#xff0c;要站在客户的角…

Quick BI助力云上大数据分析---深圳云栖大会

摘要&#xff1a; 在3月29日深圳云栖大会的数据分析与可视化专场中&#xff0c;阿里云产品专家陌停对大数据智能分析产品 Quick BI 进行了深入的剖析。大会现场的精彩分享也赢得观众们的一直认可和热烈的反响。 大数据分析之路的挑战与期望 阿里巴巴作为一家大数据公司&#xf…

怎么添加一个程序集_门店小程序,微信小程序怎么添加店铺

现今随着互联网发展&#xff0c;越来越多选择网上购物代替实体店购物&#xff0c;微信作为最多人使用的社交软件&#xff0c;他的商机也被许多企业商家发展&#xff0c;进入微信分销小程序购物是现在最流行的购物方式&#xff0c;驱使很多实体店也纷纷加盟进驻门店分销小程序&a…

阿里云Quick BI——让人人都成为分析师

摘要&#xff1a; 在3月29日深圳云栖大会的数据分析与可视化专场中&#xff0c;阿里云产品专家潘炎峰&#xff08;陌停&#xff09;对大数据智能分析产品 Quick BI 进行了深入的剖析。大会现场的精彩分享也赢得观众们的一直认可和热烈的反响。 Quick BI诞生于阿里巴巴集团自身对…

华为已找到安卓才“替代品”?马云马斯克激辩人工智能未来;微软说:麻将AI系统终获突破;扭亏!中兴通讯上半年净利14.71亿……...

戳蓝字“CSDN云计算”关注我们哦&#xff01;嗨&#xff0c;大家好&#xff0c;重磅君带来的【云重磅】特别栏目&#xff0c;如期而至&#xff0c;每周五第一时间为大家带来重磅新闻。把握技术风向标&#xff0c;了解行业应用与实践&#xff0c;就交给我重磅君吧&#xff01;重…

Python的基本数据类型和数据类型的转换

TOC 数据类型 类型查看 type 可以使用type内置函数查看变量所指的对象类型 a1 b1.0 c"1" d1, e[1] f{1:1} g{1}print(type(a)) print(type(b)) print(type(c)) print(type(d)) print(type(e)) print(type(f)) print(type(g))isinstance **如字面意思,isinstance()…

法拉克机器人自动怎么调_在使用钢网印刷SMT贴片红胶时全自动印刷机的参数怎么调?...

电子厂在使用新钢网印刷作业时&#xff0c;都需要校正钢网位置&#xff0c;调整印刷机的的压力&#xff0c;印刷速度等&#xff0c;如果调对了参数即可以省红胶又可以使印刷效果达到完美。可以做到事半功倍效果。SMT贴片印刷机参数调整注意事项(1) 压力在4.5公斤左右(2) 红胶加…

CDN高级技术专家周哲:深度剖析短视频分发过程中的用户体验优化技术点

摘要&#xff1a; 深圳云栖大会已经圆满落幕&#xff0c;在3月29日飞天技术汇-弹性计算、网络和CDN专场中&#xff0c;阿里云CDN高级技术专家周哲为我们带来了《海量短视频极速分发》的主题分享&#xff0c;带领我们从视频内容采集、上传、存储和分发的角度介绍整体方案&#x…

flink开发案例_为什么说 Flink + AI 值得期待?

作者&#xff1a;秦江杰去年 11 月的 Flink Forward Asia 2019&#xff08;以下简称 FFA&#xff09; 上 Flink 社区提出了未来发展的几个主要方向&#xff0c;其中之一就是拥抱 AI [1]。实际上&#xff0c;近年来 AI 持续火热&#xff0c;各种计算框架、模型和算法层出不穷&am…