在涉及到electron的第三方程序addon的时候,经常会出现个rebuild的概念。而在electron-rebuild .的时候,就有不小的概率会被提示NODE_MODULE_VERSION不匹配。这个问题该如何理解呢?注意看措辞,苏南大叔说的是“理解”,并不是解决。因为解决的话,说来话长,苏南大叔还暂时不想说这个话题。

苏南大叔:electron程序,如何理解NODE_MODULE_VERSION? - electron-node-module-version
electron程序,如何理解NODE_MODULE_VERSION?(图5-1)

本文测试环境,mac/electron/node

引子

下面先放个报错截图,本文就是从这个报错中引申出来的。报错内容如下:

Uncaught Error: The module 'addon.node' was compiled against a different Node.js version using
NODE_MODULE_VERSION 69. This version of Node.js requires NODE_MODULE_VERSION 70. Please try re-compiling or re-installing the module (for instance, using `npm rebuild` or `npm install`).

苏南大叔:electron程序,如何理解NODE_MODULE_VERSION? - electron-addon-rebuild-issue
electron程序,如何理解NODE_MODULE_VERSION?(图5-2)

那么,如何理解有点匪夷所思的NODE_MODULE_VERSION呢?请听苏南大叔讲述本篇内容。

node对应NODE_MODULE_VERSION

破局的关键线索来自下面的这个页面:

苏南大叔:electron程序,如何理解NODE_MODULE_VERSION? - nodejs-version-list
electron程序,如何理解NODE_MODULE_VERSION?(图5-3)

从图中可以看到,每个Node.js的版本,都有一个NODE_MODULE_VERSION做对应。而每个NODE_MODULE_VERSION,都有好几个nodejs的版本做对应。

根据上述内容,总结一下的话,node.jsNODE_MODULE_VERSION的对应关系如下:

newsn.net:这里是【评论】可见内容

当然,还有更低版本的node(从网页上还可以看到,node.js有段时间叫做io.js),苏南大叔就没有放在上表里面了。可以得出的结论是:从nodejs5.0系列开始,大版本号的变化,就意味着NODE_MODULE_VERSION的变化。

electron对应NODE_MODULE_VERSION

理解这个electron对应NODE_MODULE_VERSION的关系之前,您需要先理解好,您运行的到底是哪个electron。具体见下面这篇文字:

换算一下

每个electron都对应着一个node版本号,而每个node又对应着一个NODE_MODULE_VERSION。所以,该如何查看electron对应的node版本呢?答案就是打印一下下面的值:

process.versions.node

比如:下面的截图,是electron@6.0.0下的执行结果。可以看到process.versions.node的值,和node -v的值并不一样。

苏南大叔:electron程序,如何理解NODE_MODULE_VERSION? - process-version-1
electron程序,如何理解NODE_MODULE_VERSION?(图5-4)

直接获得

当然,还可以直接打印下面的这个值,就可以免去换算的痛苦。

process.versions.modules

可以直观的看到:electron@6.0.0对应的NODE_MODULE_VERSION73

苏南大叔:electron程序,如何理解NODE_MODULE_VERSION? - process-version-2
electron程序,如何理解NODE_MODULE_VERSION?(图5-5)

列表

要是大家懒得下载测试的话,下面的链接里面,你翻翻也是可以得出一定的结论的。

苏南大叔临时总结的表格如下:

newsn.net:这里是【评论】可见内容

结束语

electron开发过程中,addon的开发(利用)并不是一帆风顺的。对于某个addon,不同的环境下,可能会得出成功或者失败的完全不同的实验结论。所以,请大家冷静面对rebuild失败的情况。

更多electron相关经验文字,请点击苏南大叔的博客:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接作者。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

 【加群】加入QQ群【175454274】和大家一起讨论这个问题

 【源码】本文代码片段及相关软件,请点此获取

 【绝密】秘籍文章入口,仅传授于有缘之人   electron

本站的忠实读者小伙伴,正在阅读下面这些文章: