electron程序,如何理解NODE_MODULE_VERSION?
发布于 作者:苏南大叔 来源:程序如此灵动~在涉及到electron
的第三方程序addon
的时候,经常会出现个rebuild
的概念。而在electron-rebuild .
的时候,就有不小的概率会被提示NODE_MODULE_VERSION
不匹配。这个问题该如何理解呢?注意看措辞,苏南大叔说的是“理解”,并不是解决。因为解决的话,说来话长,苏南大叔还暂时不想说这个话题。
本文测试环境,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`).
那么,如何理解有点匪夷所思的NODE_MODULE_VERSION
呢?请听苏南大叔讲述本篇内容。
node
对应NODE_MODULE_VERSION
破局的关键线索来自下面的这个页面:
从图中可以看到,每个Node.js
的版本,都有一个NODE_MODULE_VERSION
做对应。而每个NODE_MODULE_VERSION
,都有好几个nodejs
的版本做对应。
根据上述内容,总结一下的话,node.js
和NODE_MODULE_VERSION
的对应关系如下:
当然,还有更低版本的node
(从网页上还可以看到,node.js
有段时间叫做io.js
),苏南大叔就没有放在上表里面了。可以得出的结论是:从nodejs
的5.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
的值并不一样。
直接获得
当然,还可以直接打印下面的这个值,就可以免去换算的痛苦。
process.versions.modules
可以直观的看到:electron@6.0.0
对应的NODE_MODULE_VERSION
是73
。
列表
要是大家懒得下载测试的话,下面的链接里面,你翻翻也是可以得出一定的结论的。
苏南大叔临时总结的表格如下:
结束语
在electron
开发过程中,addon
的开发(利用)并不是一帆风顺的。对于某个addon
,不同的环境下,可能会得出成功或者失败的完全不同的实验结论。所以,请大家冷静面对rebuild
失败的情况。
更多electron
相关经验文字,请点击苏南大叔的博客:



转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
《程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。
本站的忠实读者小伙伴,正在阅读下面这些文章:
大叔,您好,正好遇到了这个问题,需要用到node-canvas库,MAC没问题,windows下出现canvas.node版本不一致错误
nodejs:12.4.0
electron: 6.0.1
node-canvas:2.5.0
Error: The module 'C:\WorkFile\test\node_modules\canvas\build\Release\canvas.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 73. This version of Node.js requires
NODE_MODULE_VERSION 72. Please try re-compiling or re-installing
没见过帮顶