我正在尝试使用Hyperledger Fabric节点SDK包创建IBM Cloud Functions区块链node.js操作,但是我在操作中需要fabric-network包时遇到问题。
由于它是第三方软件包,似乎我需要将操作作为压缩文件上传,但是当我这样做时,我看到:
"error": "Initialization has failed due to: Error: Failed to load gRPC binary module because it was not installed for the current system\nExpected directory: node-v57-linux-x64-glibc\nFound: [node-v57-darwin-x64-unknown]\nThis problem can often be fixed by running \"npm rebuild\" on the current system"
我想创建一个如下所示的javascript操作:
'use strict'
const { X509WalletMixin, Gateway } = require('fabric-network')
async function main(params) {
return { message: 'success' }
}
处理第三方软件包的正确方法是什么?
具有本机依赖性的Node.js模块需要针对与无服务器运行时相同的平台体系结构进行编译。如果要从本地开发计算机捆绑node_modules
目录,它可能不匹配。
有两种方法可以使用具有本机依赖性的库...
npm install
。第一种方法最简单,但只能在包含所有源文件和库的zip文件小于操作大小限制(48MB)时使用。
npm install
inside runtime containernpm install
。docker run -it -v $PWD:/nodejsAction openwhisk/action-nodejs-v10 "npm install"
这将留下一个node_modules
文件夹,其中包含为正确运行时编译的本机依赖项。
node_modules
目录。zip -r action.zip *
ibmcloud wsk action create my-action --kind nodejs:10 action.zip
Dockerfile
命令创建npm install
。FROM openwhisk/action-nodejs-v10
RUN npm install fabric-network
$ docker build -t <USERNAME>/custom-runtime .
$ docker push <USERNAME>/custom-runtime
ibmcloud wsk action create my-action --docker <USERNAME>/custom-runtime action.zip
确保node_modules
中包含的action.zip
不包含相同的库文件。