Gitbook-cli 安装错误 TypeError: cb.apply is not a function inside graceful-fs

Ari*_*rra 10 node.js npm gitbook

gitbook在终端中执行任何命令时,都会抛出以下错误:

/home/travis/.nvm/versions/node/v12.18.3/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js:287
      if (cb) cb.apply(this, arguments)
                 ^
TypeError: cb.apply is not a function
    at /home/travis/.nvm/versions/node/v12.18.3/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js:287:18
    at FSReqCallback.oncomplete (fs.js:169:5)
Run Code Online (Sandbox Code Playgroud)

注意:这不会在节点版本 v12.18.2 中发生,并且在 v14.6.0 版本中仍然发生

现在gitbook-cli似乎无法正常工作,因为它们过时的graceful-fs依赖而失败。

任何想法如何解决这一问题?

Ari*_*rra 28

这个问题最初是内部的问题,graceful-fs但我相信他们在这个提交中解决了它。

问题是 GitBook 仍在使用过时的依赖项,这些依赖项在没有修复的情况下引入了优雅的 fs 版本。

我找到的解决方案是graceful-fs像这样在 gitbook 内部更新:

如果您已经通过这样做全局安装了 gitbook,npm install -g gitbook-cli那么您在 macOS 中的路径应该类似于/usr/local/lib/node_modules/gitbook-cli/node_modules/npm/node_modules. 您的路径可能因您的操作系统或安装位置而异。

运行这个:

cd /usr/local/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/
npm install graceful-fs@latest --save
Run Code Online (Sandbox Code Playgroud)

然后尝试安装 GitBook。它应该已经解决了安装问题。

  • 对于那些不使用 macOS 的用户,请使用 `npm root -g` 查找全局 npm 安装路径。 (7认同)
  • @KirillTaran 解决方案对我有用!这也对我有用(安装另一个版本):`npm install gitbook-cli@2.1.2 --global` (6认同)
  • 抱歉,这个生态系统已经崩溃了。我仍然看到“TypeError: cb.apply is not a function”和“graceful-fs@4.2.4” (5认同)
  • 这似乎不再适用于最新版本的“graceful-fs”。Gitbook 在执行任何命令后都会默默退出。版本“graceful-fs@4.2.4”似乎可以工作。 (3认同)
  • 这是非常有用的答案。 (2认同)
  • 这在我的 MacBook 上非常有用 (2认同)
  • 你救了我的命!;) (2认同)

Sve*_*kov 7

polyfills.js只需用以下 文件替换崩溃文件: https://raw.githubusercontent.com/isaacs/node-graceful-fs/168bdb8f0bb3174e8499d4bc5878deead4172c39/polyfills.js

这就像 Node.js v16.13.0 中的魅力一样。


小智 6

最后一个解决方案很棒,但是当我npm install graceful-fs@latest --save 在正确的地方使用然后重新运行时gitbook build ,出现以下错误:

_stream_readable.js:545
  switch (state.pipesCount) {
               ^
TypeError: Cannot read property 'pipesCount' of undefined
    at module.exports.Readable.pipe (_stream_readable.js:545:16)
    at module.exports.ZipArchiveOutputStream._smartStream (/node_modules/compress-commons/lib/archivers/zip/zip-archive-output-stream.js:184:11)
    at module.exports.ZipArchiveOutputStream._appendStream (/node_modules/compress-commons/lib/archivers/zip/zip-archive-output-stream.js:96:20)
    at module.exports.ArchiveOutputStream.entry (/node_modules/compress-commons/lib/archivers/archive-output-stream.js:88:10)
    at module.exports.ZipStream.entry (/node_modules/zip-stream/index.js:138:49)
    at Zip.append (/node_modules/archiver/lib/plugins/zip.js:53:15)
    at Archiver._moduleAppend (/node_modules/archiver/lib/core.js:172:16)
    at Archiver._onQueueTask (/node_modules/archiver/lib/core.js:370:8)
    at /node_modules/async/dist/async.js:3879:9
Run Code Online (Sandbox Code Playgroud)

而且……猜猜怎么着,当我change the version of graceful-fs to 4.2.0,这一切都奏效了……

  • @alireza是的,尽管从不同的错误开始,这个答案有助于解决它。我所做的就是将 `graceful-fs` 降级为 `4.2.0`。 (2认同)

Win*_*ing 5

TL; 博士

为什么不切换到honkitGitBook 的Fork)?


切换的“为什么”:

我知道这不是问题的答案,但我想提一下,gitbook 的存储库在 3 年前已被弃用,这使其成为使用特别是安全性的糟糕选择。

于是我寻找替代方案,我找到了mdBookhonkit,结果证明honkit与 gitbook 有很好的兼容性,也许切换到honkit是更好的选择,而不是用一些黑客来修复一个 3 岁的旧软件。

  • 完全有道理,这实际上就是我所做的,我已经切换到 docusaurus。尽管这可能是一条评论而不是完整的答案。 (2认同)