thrift npm 安装失败

thrift npm instalation fails

我正在尝试在我的 angular 项目中安装 NPM 包 thirft。我添加到 mi package.json:

"@types/thrift": "^0.10.9",
"thrift": "^0.13.0",
"node-int64": "^0.4.0",

然后我运行npm Install一切似乎都很顺利

如 npm 包网页中所述,我必须 g运行t 包才能完成安装。 按照我到达包并执行的步骤: npm 安装 npx g运行t

然后我得到这个错误

Running "shell:ThriftGen" (shell) task
>> /bin/sh: 1: ../../compiler/cpp/thrift: not found 
Warning: Done, with errors: command "mkdir -p test/gen-js && ../../compiler/cpp/thrift -gen js --out test/gen-js ../../test/ThriftTest.thrift && ../../compiler/cpp/thrift -gen js --out test/gen-js ../../test/JsDeepConstructorTest.thrift && mkdir -p test/gen-js-jquery && ../../compiler/cpp/thrift -gen js:jquery --out test/gen-js-jquery ../../test/ThriftTest.thrift && mkdir -p test/gen-nodejs && ../../compiler/cpp/thrift -gen js:node --out test/gen-nodejs ../../test/ThriftTest.thrift && mkdir -p test/gen-js-es6 && ../../compiler/cpp/thrift -gen js:es6 --out test/gen-js-es6 ../../test/ThriftTest.thrift && mkdir -p test/gen-nodejs-es6 && ../../compiler/cpp/thrift -gen js:node,es6 --out ./test/gen-nodejs-es6 ../../test/ThriftTest.thrift" (target "ThriftGen") exited with code 127. Use --force to continue.                                                                                                                                                                                                                                                     
Aborted due to warnings. 

事实证明,使用强制不会解决根本问题,而是会忽略它并导致错误安装。

2021 年 2 月 23 日编辑:

这几天,Apache thrift 0.14.0 发布了。这应该可以解决上述问题。如果您遇到任何问题,请试一试并提出一个新问题。参见 https://www.npmjs.com/package/thrift

原答案:

截至目前(thrift 0.13.0)Node.js 包存在多个问题。这些问题记录在此处:

所有这些问题都已在 https://github.com/apache/thrift 的上游 master 分支中得到修复。但是修复还没有发布到 npm。

如果您迫切需要一个工作储蓄机构,我建议您自己从源头构建它。这将需要一些摆弄,但这并非不可能。一般来说,对于这种请求,最好在 https://thrift.apache.org/mailing 的用户邮件列表中询问。但我会尝试在此处概述相关步骤。

您需要创建一个本地 Node.js 程序包,您可以使用它来代替通常的 npm install 命令。有关详细信息,请参阅 Node.js package documentation。这个 Node.js 包 包含 thrift 编译器,因此从 IDL 文件生成新的 Thrift 绑定是不够的。如果您也需要编译器,从二进制发行版(例如您的 Linux 发行版,如果有的话)安装它可能是最简单的。 Apache Thrift 本身不提供现成的二进制文件。

以下是生成 Node.js 包所需的步骤:

  1. https://github.com/apache/thrift
  2. 克隆 Thrift master 分支
  3. 打开终端并转到结帐的根文件夹
  4. 调用 npm install 安装构建依赖项
  5. npm pack 打包一个本地 Node.js 的 Thrift 包 这将(截至目前)创建一个本地包 thrift-0.14.0.tgz,其中包含 Thrift 的最新 Node.js 源。
  6. 将其复制到您的 Angular 项目,然后使用 npm --save "file:thrift-0.14.0.tar.gz"
  7. 安装它