Ubuntu18.04安装MyEtherWallet-v5.0.10时wrtc@0.2.1失败求助
解决Ubuntu 18.04安装MyEtherWallet-v5.0.10时wrtc@0.2.1失败的问题
我来帮你搞定这个头疼的安装问题——wrtc@0.2.1确实是个比较老的版本,和新Node版本的兼容性坑不少,咱们一步步来试这些方案:
方案一:手动指定可用的预编译包(解决404问题)
官方的wrtc@0.2.1预编译包可能已经下架了,导致下载返回404。你可以手动指定一个可用的预编译包地址,安装时加上环境变量:
首先先查一下你当前Node版本对应的ABI编号,执行:
node -p process.versions.modules
比如Node 8.17.0对应的是57,Node 10.24.1是64,Node 11.14.0是67。
然后把这个编号替换到下面的URL里,执行安装命令:
npm install MyEtherWallet-v5.0.10 --unsafe-perm --WITH_WEBRTC_BINARY=https://github.com/node-webrtc/node-webrtc/releases/download/v0.2.1/wrtc-v0.2.1-node-v{你的ABI编号}-linux-x64.tar.gz
--unsafe-perm是为了避免编译时的权限问题,必须加上。
方案二:降级到完全兼容的Node版本(解决编译参数不匹配)
wrtc@0.2.1对Node版本挑得很厉害,最兼容的是Node 8.17.0(这个版本的V8 API刚好和它的编译要求完全匹配)。你可以用nvm切换到这个版本:
nvm install 8.17.0 nvm use 8.17.0
切换完成后,清理一下npm缓存再安装:
npm cache clean --force npm install MyEtherWallet-v5.0.10 --unsafe-perm
这个方法大概率能解决编译时的v8::Promise::Resolver参数不匹配问题,因为这个Node版本的V8接口就是wrtc@0.2.1开发时用的。
方案三:手动修改wrtc源码后编译(终极方案)
如果上面两个方法都不行,咱们就手动改源码适配:
- 先克隆wrtc的仓库并切到0.2.1版本:
git clone https://github.com/node-webrtc/node-webrtc.git cd node-webrtc git checkout v0.2.1
- 找到
src/promise.cpp文件,里面用到v8::Promise::Resolver的地方,在Node 10+版本里构造函数需要传Isolate*参数,你需要把类似这样的代码:
auto resolver = v8::Promise::Resolver::New(context);
改成:
auto resolver = v8::Promise::Resolver::New(isolate, context);
(这里的isolate需要是当前的V8隔离实例,你可以在函数里找一下已经定义的Isolate* isolate变量)
3. 编译并本地链接wrtc:
npm install --unsafe-perm npm link
- 回到MyEtherWallet的安装目录,链接本地的wrtc再安装:
npm link wrtc npm install
前置准备:确保Ubuntu编译依赖齐全
无论用哪个方案,先把Ubuntu上的编译依赖装全,避免因为缺库失败:
sudo apt-get update && sudo apt-get install build-essential libssl-dev libuv1-dev libwebkitgtk-3.0-dev
内容的提问来源于stack exchange,提问作者SinTan1071
相关产品推荐
相关产品推荐

