本文首发在我的Github Page:https://mizeri.github.io
欢迎大家参观和转载,么么哒🍻~
Gitbook是个挺好用的Node.js应用,最近在用它翻译一本书,可以用Markdown编译,挺简洁的,网络发布也很不错。然鹅,着实遇到了一些bug,翻了代码才解决,希望给后面一样踩了坑的小伙伴一点帮助T^T
这个错误是这样的:
/usr/local/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js:299
if (cb) cb.apply(this, arguments)
^
TypeError: cb.apply is not a function
at /usr/local/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js:299:18
这个错误是在Generate的时候发生的,我也不知道这个cb.apply是干嘛的,我以前也没碰上,可能是最近用hexo之前升级了Node.js……吧,不管那么多,顺藤摸代码,按错误提示的路径找到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
的第65行起:
fs.stat = statFix(fs.stat)
fs.fstat = statFix(fs.fstat)
fs.lstat = statFix(fs.lstat)
emm,看statFix()
里的注释信息
// Older versions of Node erroneously returned signed integers for
// uid + gid.
似乎是为了解决旧版本返回uid+gid时候的数据类型的问题,然而我是更新了之后才出的问题😑,所以这个函数应该用不上了。
所以,将65行起的三行都注释掉:
// fs.stat = statFix(fs.stat)
// fs.fstat = statFix(fs.fstat)
// fs.lstat = statFix(fs.lstat)
搞定!再次运行Gitbook生成作品,没问题了!✿✿ヽ(°▽°)ノ✿