hyperledger fabric JavaScript-应用程序节点 app.js 不工作

hypeledger fabric JavaScript-application node app.js does not work

我是区块链领域的新手,我尝试 运行 来自 Hyperledger 网络的示例网络遵循 this 文档。我开始下载先决条件并做好所有事情。

网络正在工作并使用 JavaScript 部署它,在所有通道和部署之后我将 cd 放入 JavaScript-应用程序到 运行 app.js 作为文档说但是我得到了这个错误

node app
node:internal/modules/cjs/loader:944
  throw err;
  ^

Error: Cannot find module 'pkcs11js'
Require stack:
- D:\fifthLevel\blockchain\hyperledger\try-fabric-network\go\src\github.com\FatimaAlmashhor\fabric-samples\asset-transfer-basic\application-javascript\node_modules\fabric-common\lib\impl\bccsp_pkcs11.js
- D:\fifthLevel\blockchain\hyperledger\try-fabric-network\go\src\github.com\FatimaAlmashhor\fabric-samples\asset-transfer-basic\application-javascript\node_modules\fabric-common\lib\User.js
- D:\fifthLevel\blockchain\hyperledger\try-fabric-network\go\src\github.com\FatimaAlmashhor\fabric-samples\asset-transfer-basic\application-javascript\node_modules\fabric-common\index.js
- D:\fifthLevel\blockchain\hyperledger\try-fabric-network\go\src\github.com\FatimaAlmashhor\fabric-samples\asset-transfer-basic\application-javascript\node_modules\fabric-network\lib\logger.js
- D:\fifthLevel\blockchain\hyperledger\try-fabric-network\go\src\github.com\FatimaAlmashhor\fabric-samples\asset-transfer-basic\application-javascript\node_modules\fabric-network\lib\impl\query\query.js
- D:\fifthLevel\blockchain\hyperledger\try-fabric-network\go\src\github.com\FatimaAlmashhor\fabric-samples\asset-transfer-basic\application-javascript\node_modules\fabric-network\lib\transaction.js
- D:\fifthLevel\blockchain\hyperledger\try-fabric-network\go\src\github.com\FatimaAlmashhor\fabric-samples\asset-transfer-basic\application-javascript\node_modules\fabric-network\lib\contract.js
- D:\fifthLevel\blockchain\hyperledger\try-fabric-network\go\src\github.com\FatimaAlmashhor\fabric-samples\asset-transfer-basic\application-javascript\node_modules\fabric-network\lib\network.js
- D:\fifthLevel\blockchain\hyperledger\try-fabric-network\go\src\github.com\FatimaAlmashhor\fabric-samples\asset-transfer-basic\application-javascript\node_modules\fabric-network\lib\gateway.js
- D:\fifthLevel\blockchain\hyperledger\try-fabric-network\go\src\github.com\FatimaAlmashhor\fabric-samples\asset-transfer-basic\application-javascript\node_modules\fabric-network\index.js
- D:\fifthLevel\blockchain\hyperledger\try-fabric-network\go\src\github.com\FatimaAlmashhor\fabric-samples\asset-transfer-basic\application-javascript\app.js
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:941:15)
    at Function.Module._load (node:internal/modules/cjs/loader:774:27)   
    at Module.require (node:internal/modules/cjs/loader:1013:19)
    at require (node:internal/modules/cjs/helpers:93:18)
    at Object.<anonymous> (D:\fifthLevel\blockchain\hyperledger\try-fabric-network\go\src\github.com\FatimaAlmashhor\fabric-samples\asset-transfer-basic\application-javascript\node_modules\fabric-common\lib\impl\bccsp_pkcs11.js:27:18)
    at Module._compile (node:internal/modules/cjs/loader:1109:14)        
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1138:10)
    at Module.load (node:internal/modules/cjs/loader:989:32)
    at Function.Module._load (node:internal/modules/cjs/loader:829:14)   
    at Module.require (node:internal/modules/cjs/loader:1013:19) {       
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    'D:\fifthLevel\blockchain\hyperledger\try-fabric-network\go\src\github.com\FatimaAlmashhor\fabric-samples\asset-transfer-basic\application-javascript\node_modules\fabric-common\lib\impl\bccsp_pkcs11.js',
    'D:\fifthLevel\blockchain\hyperledger\try-fabric-network\go\src\github.com\FatimaAlmashhor\fabric-samples\asset-transfer-basic\application-javascript\node_modules\fabric-common\lib\User.js',
    'D:\fifthLevel\blockchain\hyperledger\try-fabric-network\go\src\github.com\FatimaAlmashhor\fabric-samples\asset-transfer-basic\application-javascript\node_modules\fabric-common\index.js',
    'D:\fifthLevel\blockchain\hyperledger\try-fabric-network\go\src\github.com\FatimaAlmashhor\fabric-samples\asset-transfer-basic\application-javascript\node_modules\fabric-network\lib\logger.js',       
    'D:\fifthLevel\blockchain\hyperledger\try-fabric-network\go\src\github.com\FatimaAlmashhor\fabric-samples\asset-transfer-basic\application-javascript\node_modules\fabric-network\lib\impl\query\query.js',
    'D:\fifthLevel\blockchain\hyperledger\try-fabric-network\go\src\github.com\FatimaAlmashhor\fabric-samples\asset-transfer-basic\application-javascript\node_modules\fabric-network\lib\transaction.js',  
    'D:\fifthLevel\blockchain\hyperledger\try-fabric-network\go\src\github.com\FatimaAlmashhor\fabric-samples\asset-transfer-basic\application-javascript\node_modules\fabric-network\lib\contract.js',     
    'D:\fifthLevel\blockchain\hyperledger\try-fabric-network\go\src\github.com\FatimaAlmashhor\fabric-samples\asset-transfer-basic\application-javascript\node_modules\fabric-network\lib\network.js',
    'D:\fifthLevel\blockchain\hyperledger\try-fabric-network\go\src\github.com\FatimaAlmashhor\fabric-samples\asset-transfer-basic\application-javascript\node_modules\fabric-network\lib\gateway.js',
    'D:\fifthLevel\blockchain\hyperledger\try-fabric-network\go\src\github.com\FatimaAlmashhor\fabric-samples\asset-transfer-basic\application-javascript\node_modules\fabric-network\index.js',
    'D:\fifthLevel\blockchain\hyperledger\try-fabric-network\go\src\github.com\FatimaAlmashhor\fabric-samples\asset-transfer-basic\application-javascript\app.js'
  ]
}

我不知道错误是从哪里来的节点似乎很好,我可以在 node_modules 和 package-lock.json

中看到所有包
node -v
v16.3.0
npm -v
7.17.0

看起来 fabric node-sdk 已经破坏了 C 编译器是可选的功能,现在它是强制性的,但是因为 pkcs11 仍然被声明为可选的,node-sdk 不会安装失败但会失败 运行 如你所见。你要么必须

  1. 安装 Microsoft C 编译器 + python v3 并重新安装(或重建)fabric node-sdk 节点模块,然后可以构建 pkcs11 本机库(参见 https://www.npmjs.com/package/windows-build-tools关于如何安装编译器和 python)
  2. 指定一个特定版本的结构节点 sdk(看起来它在 2.2.4 中被破坏所以 2.2.3 应该可以工作)所以擦除 node_modules 目录并更新 package.json 以指定完全是 fabric-network 的版本(即输入 2.2.3,没有前面的字符,例如 ^ 或 ~)和 运行 npm install again
  3. 使用 linux 桌面发行版而不是 windows,因为它们往往包含构建本机节点库所需的先决条件

最后要注意的是,您使用的是不受支持的节点和 npm 版本。您应该使用节点 12 或节点 14,因为这些是支持的 lts 版本