Error: Cannot find module './api' (Hyperledger composer)

Error: Cannot find module './api' (Hyperledger composer)

从这个 page 安装 Hyperledger Composer cli 后,我尝试调用 composer 命令但出现此错误:

module.js:549
throw err;
^

Error: Cannot find module './api'
at Function.Module._resolveFilename (module.js:547:15)
at Function.Module._load (module.js:474:25)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/home/user/.nvm/versions/node/v8.11.1/lib/node_modules/composer-cli/node_modules/node-report/index.js:3:13)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)

我使用这个命令来安装 Hyperledger Composer:

npm install --unsafe-perm -g composer-cli

请问这是怎么回事?

就我而言,我在全局 /usr/lib/node_modules/composer-cli 中安装了 composer-cli,我遇到了同样的问题。我不知道出了什么问题,但我试过了:

  1. 将目录更改为 composer-cli:

    cd /usr/lib/node_modules/composer-cli

  2. 重新安装节点报告模块,locally inside composer-cli:

    sudo npm install node-report --unsafe-perm

请注意,我没有将 -g 参数放入 sudo npm install 中,以使安装本地化到 composer-cli 本身。

node-report 将 运行 makeg++ 编译一些东西(由于某些原因在 composer-cli 安装期间不是 运行 ) 它就可以了...现在我可以 运行 composer.

对于您的情况,将工作目录设置为 /home/user/.nvm/versions/node/v8.11.1/lib/node_modules/composer-cli

对我来说,彻底擦

rm -rf /usr/lib/node_modules/composer-cli

并执行 npm install -g composer-cli

成功了 :)(重新安装节点报告没有成功)

答案是

1) 不要求助于使用 root 或 sudo(如上面评论中所建议的那样)来安装 Composer npm 模块——这会导致 npm 问题 prerequisites . Instead, follow best practices for npm installs: don't use sudo or root to install Composer - it will always cause issues further down the line. Follow the best practices here https://docs.npmjs.com/getting-started/fixing-npm-permissions

2) 每个安装有一个受支持的 npm 版本(5.x 截至 2018 年 6 月)docs

3) 安装 - 然后使用 - nvm 来管理您的 NODE 版本 - 如上所示,支持 Node 8.11.x。对于 NVM - 请参阅 https://github.com/creationix/nvm#installation - 它会安装它。例如。 nvm install v8.11.1 2) nvm use 8.11.1 等等

4) 如果您已经/以前使用 sudo 或 root 安装了 Composer 模块 - 使用 npm uninstall -g(即全局)使用该 ID 删除它们,然后按照上面 1) 中提到的 'best practices'并按照 Composer install docs 安装 Composer 模块 - 非常非常直接。

遵循这些步骤 - 每次都有效。