Hyperledger Fabric Fabcar执行enrollAdmin.js遇ENOENT错误的解决方法
解决Fabric执行
node enrollAdmin.js时的grpc目录缺失错误 嘿,这个问题我帮不少开发者踩过坑,本质就是grpc模块安装时没正确生成对应的二进制扩展文件,导致程序找不到那个指定的目录。下面给你几个经过验证的解决步骤,按顺序试就行:
第一步:清理现有依赖,重新安装
先切换到你的fabcar项目目录:
cd /Users/jaspalsingh/fabric-samples/fabcar
然后删掉已经安装的依赖包和锁文件,避免残留问题:
rm -rf node_modules package-lock.json
接着重新安装依赖,要是你的Node版本比较新,记得加--legacy-peer-deps参数来处理依赖冲突:
npm install --legacy-peer-deps
第二步:手动指定grpc的安装参数(适配Node版本)
如果第一步没用,大概率是你的Node版本和grpc版本不兼容。可以手动指定目标Node版本和平台来重装grpc:
npm install grpc --target=<你的Node版本号> --target_arch=x64 --target_platform=darwin
举个例子,要是你用的是Node v14.21.3,就执行:
npm install grpc --target=14.21.3 --target_arch=x64 --target_platform=darwin
提示:用node -v就能查看你的Node版本
第三步:改用fabric-network(长期解决方案)
Fabric官方早就不推荐直接依赖grpc了,fabric-network模块已经封装了所有需要的网络交互逻辑,还自动处理了grpc的兼容问题。你可以这么操作:
- 打开fabcar目录下的
package.json,把里面旧的grpc相关依赖换成下面这样:
"dependencies": { "fabric-network": "^2.2.0", "fabric-ca-client": "^2.2.0" }
- 再次清理依赖并重装:
rm -rf node_modules package-lock.json npm install --legacy-peer-deps
- 最后修改
enrollAdmin.js这类文件,把原来的const grpc = require('grpc')删掉,换成const { Wallets, Gateway } = require('fabric-network'),后续的交互逻辑也跟着改成fabric-network的用法就行。
第四步:检查Node版本是否符合Fabric要求
Fabric对Node版本卡得很严,比如2.x系列推荐用Node 12.x或14.x,要是你用的是v16+的高版本,很容易出兼容问题。可以用nvm来快速切换版本:
# 先装nvm(没装过的话) curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash # 安装指定版本的Node nvm install 14.21.3 # 切换到这个版本 nvm use 14.21.3
切换完版本后,再回去执行第一步的依赖安装。
额外小技巧:如果以上步骤都没搞定,试试清理grpc的缓存文件:
rm -rf ~/.npm/_npx/* rm -rf ~/.node-gyp然后重新安装依赖就行。
内容的提问来源于stack exchange,提问作者Jaspal Singh
相关产品推荐
相关产品推荐

