TypeScript项目导入fabric-common的BlockDecoder失败该如何解决?
问题解决方法
根因
你的项目中Hyperledger Fabric相关依赖版本不兼容:fabric-network@2.1.x 和 fabric-common@2.2.9 小版本不匹配,同时残留的fabric-client@1.4.x 是1.x分支的老版本包,和2.x版本的Fabric全家桶存在模块导出冲突。
修复步骤
- 第一步:修改package.json的依赖配置,统一Fabric相关依赖版本,删除无用的老旧依赖
"dependencies": { "fabric-common": "~2.2.9", "fabric-network": "~2.2.9" }
删除原配置中的fabric-client、sdk-fabric两个依赖,Fabric 2.x版本的SDK已经不需要依赖这两个包。
- 第二步:清理缓存重装依赖
删除项目根目录下的node_modules文件夹、package-lock.json或yarn.lock文件,执行以下命令重装依赖:
npm install
- 第三步:调整导入写法(可选,针对ESModule导入兼容问题)
如果调整版本后依然提示导入失败,可修改导入语句为以下两种写法之一:
- 全量导入后取用:
import * as FabricCommon from 'fabric-common'; // 调用时写法 const resultJson = FabricCommon.BlockDecoder.decode(resultByte);
- 改用CommonJS导入写法:
const { BlockDecoder } = require('fabric-common');
如果是TypeScript编译时报类型不存在的错误,可在tsconfig.json的compilerOptions中添加以下配置:
"esModuleInterop": true, "allowSyntheticDefaultImports": true
- 额外注意:你当前代码中使用的
logger未做导入声明,运行时会抛出未定义错误,可替换为console或自行引入对应的日志工具。
内容的提问来源于stack exchange,提问作者ahmed
相关产品推荐
相关产品推荐

