Gitbook v3.2.3 报错 cb.apply is not a function 的解决办法
升级了 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论