Рубрики
Без рубрики

Как я исправил ошибку “cb.apply не является функцией” при использовании Gitbook

Я регулярно пользуюсь Gitbook, немного Node.js программное обеспечение, используемое для создания электронной книги из набора файлов уценки. Я использую его для своих электронных книг. Сегодня я пытался создать PDF-файл, запустив git book pdf., когда я получил действительно странную ошибку: ➜ электронная книга git:(мастер) ✗ git book pdf. /usr/локальный/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/изящный-fs/полифиллы.js:287 если (cb) cb.применить (это, аргументы)^ Ошибка типа: cb.apply не является функцией в /usr/local/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js:287:18 cb.apply не является функцией. Что это вообще значит?

Я регулярно использую 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:18

cb.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/”