Cách tôi sửa lỗi "cb.apply không phải là chức năng" khi sử dụng Gitbook

Tôi thường xuyên sử dụngGitbook, một phần mềm Node.js nhỏ được sử dụng để tạo ebook từ một tập hợp các tệp đánh dấu.

Tôi sử dụng nó cho sách điện tử của mình. Hôm nay, tôi đã cố gắng tạo một tệp PDF, đang chạygitbook pdf ., khi tôi gặp một lỗi thực sự kỳ lạ:

➜  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 is not a function. Điều này thậm chí còn có ý nghĩa gì? Và quan trọng nhất, tại sao tôi lại gặp lỗi nàyhiện nay? Tôi đã không cập nhật gói gitbook gần đây và tôi cũng không… Ồ, tôi nghĩ tôi đã cập nhật phiên bản Node.js mà tôi chạy. Nhưng tôi không biết tại sao đây lại là vấn đề. Có thể nó là.

Dù sao .. lỗi đến từ/usr/local/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.jstập tin. Đây làgraceful-jsgói npm, một “phần mềm thay thế cho Node.js tích hợp sẵnfs, thực hiện nhiều cải tiến khác nhau ”, được cài đặt hơn 33 triệu lần một tuần.

Một trong những cải tiến đó dường như phá vỡ quy trình làm việc của tôi, ngay hôm nay!

Tôi không có nhiều thời gian rảnh để tìm hiểu lý do tại sao phiên bản Node.js của tôi gặp sự cố với ứng dụng mà tôi không tạo và thư viện này.

Tôi đã mở tệp/usr/local/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js, lỗi đến từ đâu.

Đây là hàm đưa ra sự cố:

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)
    })
  }
}

Điều này dường như sửa chữa một cái gì đó trong phiên bản cũ hơn của Node.js .. nó không cần thiết đối với tôi.

Tôi thấy nó đang được sử dụng trong các dòng 62-64 của cùng một tệp:

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

Tôi đã nhận xét những dòng đó:

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

và mọi thứ đều hoạt động tốt, tôi có thể chạygitbooklệnh một lần nữa, và tôi đã nhận được tệp PDF đẹp của mình.

Tải xuống miễn phí của tôiSổ tay dành cho Người mới bắt đầu JavaScript


Các hướng dẫn js khác: