Gitbook v3.2.3 报错 cb.apply is not a function 的解决办法

发布于 2022-10-04 12:52:00 字数 2300 浏览 145 评论 0

升级了 Node.js 的版本,在安装 Gitbook 的时候就直接报错了:

C:\Users\Administrator\AppData\Roaming\nvm\v14.19.0\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 C:\Users\Administrator\AppData\Roaming\nvm\v14.19.0\node_modules\gitbook-cli\node_modules\npm\node_modules\graceful-fs\polyfills.js:287:18
    at FSReqCallback.oncomplete (fs.js:192:5)

不管那么多,顺藤摸代码,按错误提示的路径找到 polyfills.js,这个路径在你的电脑上有可能是隐藏的,总之显示隐藏文件就能看到,打开看到第299行这里,发现这里写了个函数 statFix()

function statFix (orig) {
    if (!orig) return orig
    // Older versions of Node erroneously returned signed integers for
    // uid + gid.
    return function (target, options, cb) {
      if (typeof options === 'function') {
        cb = options
        options = null
      }
      function callback (er, stats) {
        if (stats) {
          if (stats.uid < 0) stats.uid += 0x100000000
          if (stats.gid < 0) stats.gid += 0x100000000
        }
        if (cb) cb.apply(this, arguments)
      }
      return options ? orig.call(fs, target, options, callback)
        : orig.call(fs, target, callback)
    }
  }

在里面定义了一个 callback,用到了 cb.apply

if (cb) cb.apply(this, arguments)

搜索 statFix() 函数,发现在 polyfills.js 的第 62 行起:

fs.stat = statFix(fs.stat)
fs.fstat = statFix(fs.fstat)
fs.lstat = statFix(fs.lstat)

statFix() 里的注释信息

// Older versions of Node erroneously returned signed integers for
// uid + gid.

似乎是为了解决旧版本返回 uid+gid 时候的数据类型的问题,然而我是更新了之后才出的问题,所以这个函数应该用不上了。

所以,将 62 行起的三行都注释掉:

// fs.stat = statFix(fs.stat)
// fs.fstat = statFix(fs.fstat)
// fs.lstat = statFix(fs.lstat)

熟悉的输出结果又来了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

醉城メ夜风

文章 0 评论 0

远昼

文章 0 评论 0

平生欢

文章 0 评论 0

微凉

文章 0 评论 0

Honwey

文章 0 评论 0

qq_ikhFfg

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文