Node.js 链节点未捆绑 node_modules 的 `peer lifecycle chaincode package` 命令

`peer lifecycle chaincode package`command for Node.js chainode not bundling node_modules

Hyperledger Fabric 版本: 2.2.4

结构客户端: Fabric-Tools 2.2 Docker 图片 - https://hub.docker.com/layers/hyperledger/fabric-tools/2.2/images/sha256-a5f691808466e90942af3f5f72d697cdaa4e545acfc1f645a553986423ef7ea5?context=explore

链码: 面料样品 Javascript

问题背景: 我目前正在创建一个 CI/CD 管道,用于使用 2.x 链代码生命周期部署链代码。我在部署 Node.js 链代码时遇到意外行为,因此 node_modules 我在 运行ning peer lifecycle chaincode package(根据文档)之前使用 npm install 安装的 node_modules 不包含在结果 tar.gz 代码内包。tar.gz。因为我的对等节点无法访问互联网来安装依赖项,所以缺少模块会导致在安装后 运行 连接链代码时出错。更具体地说,我收到与缺失模块相关的错误,例如在链代码示例的 require() 语句中定义的 Fabric Shim。

当手动解构解压 tar.gz 结构时,code.tar.gz 存档不包含 node_modules 存在于目标链代码目录中,我在peer lifecycle chaincode package命令。

预期行为: 我的理解是,新的链代码生命周期打包过程在部署之前将依赖项包含在 tar.gz 包中,因此不需要 运行 npm install 或在 运行 时从外部下载依赖项.更具体地说,根据在线文档和示例,peer lifecycle chaincode package 命令似乎会在部署包中包含来自 node_modules 的已安装依赖项。

这不是链码打包机制的默认行为吗?如果不是,是否有最佳实践来捆绑对 Node.js 链码的依赖,其中 npm install 在对等端是不可能的?

TIA 在这里寻求任何帮助

peer 生命周期链代码包明确排除了 node_modules 目录。另外,我假设您当前正在使用内置的 docker 构建器和对等方的启动器,即使您确实发送了一个包含 node_modules 目录的包,它仍会在其上调用 npm install即使存在 node_modules 目录,也可能最终会尝试与外部 npm 注册表进行交互。

我建议您考虑使用链码外部构建器和启动器,请参阅 https://hyperledger-fabric.readthedocs.io/en/release-2.2/cc_launcher.html 并且您可以处理已经包含 node_modules 的链码包。链代码包只是一个 tar.gz 文件,因此很容易按照 link

中的描述自行打包

或使用链代码作为服务https://hyperledger-fabric.readthedocs.io/en/release-2.2/cc_service.html,它不需要任何代码由对等方打包和处理。