Hyperledger Fabric链码引入snarkjs报Unexpected token '.'语法错误求助
问题原因
报错中的globalThis?.Blob是ES2020引入的可选链操作符,而Hyperledger Fabric链码容器默认使用的Node.js版本低于14.0.0(该版本才开始支持可选链语法)。链码容器的Node环境与本地独立,所以本地更换Node版本无法解决问题。
解决方案
方案1:降级snarkjs至兼容低Node版本的版本
- 在链码项目的
package.json中,将snarkjs指定为较低版本,例如"snarkjs": "^0.6.10"(该版本依赖的@iden3/binfileutils未使用可选链语法)。 - 重新执行
npm install,之后重新打包、部署链码。
方案2:自定义链码镜像,使用高版本Node.js
- 创建自定义链码基础镜像,基于Node.js 14+版本,示例Dockerfile:
FROM node:16-bullseye-slim WORKDIR /usr/local/src COPY . . RUN npm install --production CMD ["node", "chaincode.js"]
- 部署链码时,通过Fabric链码定义指定使用该自定义镜像,或修改链码打包配置,采用高版本Node基础镜像。
验证步骤
部署完成后,进入链码容器执行node -v,确认Node版本在14.0.0以上,再检查链码是否正常启动。
内容的提问来源于stack exchange,提问作者Mark Jabbour
相关产品推荐
相关产品推荐

