玉环县企业网站建设,个人网页设计排版,南京网络营销课程培训,物流网站建设摘要欢迎来到我的专题文章#xff1a;《让C给node做技术加持》系列。更多内容#xff0c;持续更新中#xff0c;欢迎关注。往期目录#xff1a;专题#xff1a;让C给node做技术加持(一)环境搭建#xff0c;项目运行专题#xff1a;让C给node做技术加持(二)-NodeJs调用C方法上…欢迎来到我的专题文章《让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 --target8.2.2 --dist-urlhttps://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项目中接着启动下项目终于成功调用啦。。。到这坑算是填好了。总结在做项目或者为项目做技术调研的时候难免会入坑查阅资料去把坑填好也是我们在技术成长中非常重要的一环。这种开发C本地模块的方式已经不被Nodejs官网推荐了因为它过度依赖于nodejs版本和electron版本无法做到一次编写一次编译。无论是electron还是普通的Nodejs都可以无缝调用。为了解决这些痛点nodejs已经给了开发者新的开发模块那就是N-API,它就比较灵活了后面我们接着说它。下期柳暗花明以N-AP模式基于C开发nodejs模块的春天要来了。这里是 畅哥聊技术 《让C给node做技术加持》专题系列文章更多内容持续更新中欢迎关注。全文完。