Я регулярно использую Gitbook , немного Node.js программное обеспечение, используемое для создания электронной книги из набора файлов уценки.
Я использую его для своих электронных книг. Сегодня я пытался создать PDF-файл, запустив git book pdf. , когда я получил действительно странную ошибку:
➜ ebook git:(master) ✗ gitbook pdf .
/usr/local/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 /usr/local/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js:287:18cb.apply не является функцией . Что это вообще значит? И самое главное, почему у меня эта ошибка сейчас ? Я не обновлял пакет git book в последнее время, и я не… О, я думаю, что обновил Node.js версия, которую я запускаю. Но я понятия не имею, почему это должно быть проблемой. Может быть, так оно и есть.
В любом случае.. ошибка исходит из /usr/local/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js файл. Это пакет graceful-js npm , “выпадающая замена встроенного Node.js fs модуль, внесение различных улучшений”, устанавливаемый более 33 миллионов раз в неделю.
Одно из этих улучшений, похоже, нарушает мой рабочий процесс сегодня!
У меня не так много свободного времени, чтобы выяснить, почему мой Node.js версия дает проблемы с этим приложением, которое я не создавал, и этой библиотекой.
Я открыл файл /usr/local/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js , откуда берется ошибка.
Вот функция, которая создает проблему:
function statFix (orig) {
if (!orig) return orig
// Older versions of Node erroneously returned signed integers for
// uid + gid.
return function (target, cb) {
return orig.call(fs, target, function (er, stats) {
if (!stats) return cb.apply(this, arguments)
if (stats.uid < 0) stats.uid += 0x100000000
if (stats.gid < 0) stats.gid += 0x100000000
if (cb) cb.apply(this, arguments)
})
}
}Это, кажется, исправляет что-то в более старой версии Node.js ..мне это не должно быть нужно.
Я вижу, что он используется в строках 62-64 того же файла:
fs.stat = statFix(fs.stat) fs.fstat = statFix(fs.fstat) fs.lstat = statFix(fs.lstat)
Я прокомментировал эти строки:
// fs.stat = statFix(fs.stat) // fs.fstat = statFix(fs.fstat) // fs.lstat = statFix(fs.lstat)
и все работало нормально, я смог снова запустить команду git book , и я получил свой хороший PDF-файл.
Оригинал: “https://flaviocopes.com/cb-apply-not-a-function/”