react-pdf Ошибки: Uncaught SyntaxError: Unexpected token '<' // Error: Setting up fake worker failed: "Cannot read property 'Wor
Primary tabs
Проблема
Для кода вида (пакет react-pdf):
<Document file={link} onLoadSuccess={null} onLoadError={onLoadError} > <Page pageNumber={1} /> </Document>
Получаем в консоли браузера:
Warning: Setting up fake worker.
-- предупреждение в pdf.js:549, затем:
Uncaught SyntaxError: Unexpected token '
-- ошибка при попытка загрузить pdf.worker.js по неправильному пути ( /pdf.worker.js просто прибавляется к текущему url и такого файла там, конечно же, нет)
react_devtools_backend.js:2430 Error: Setting up fake worker failed: "Cannot read property 'WorkerMessageHandler' of undefined".
at pdf.js:2336
Причина
Причина в том, что пакет react-pdf требует чтобы вы сами разобрались с подключением файла pdf.worker.js, о чем (кратко по некоторым пунктам) говорится в одном из разделов его документации.
Возможное решение 1: грузим файл pdf.worker.js с CDN
В корневом файле вашего приложения (ну или где-то выше начала использования react-pdf) добавьте код:
import { pdfjs } from 'react-pdf'; pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`;
-- это вариант загрузки с cdn, который упоминается в документации.
Возможное решение 2: берем файл pdf.worker.js из зависимостей самого react-pdf
В моем случае подошел вот такой вариант с использованием file-loader и загрузкой файла pdf.worker.js из node_modules/ самого пакета react-pdf (т.е. уже с диска, а не из сети, что удобнее):
import { pdfjs } from 'react-pdf'; import PDFJSWorker from '!!file-loader!react-pdf/node_modules/pdfjs-dist/build/pdf.worker.js'; pdfjs.GlobalWorkerOptions.workerSrc = PDFJSWorker;
Возможное решение 3: берем файл pdf.worker.js из отделно установленного пакет pdfjs-dist
Действуем так:
- Устанавливаем pdfjs-dist
-
Далее пробуем, опять же, через file-loader загружаем pdf.worker.js из pdfjs-dist:
import { pdfjs } from 'react-pdf'; import PDFJSWorker from '!!file-loader!pdfjs-dist/build/pdf.worker.js'; pdfjs.GlobalWorkerOptions.workerSrc = PDFJSWorker;
если все заработает -- хорошо, решение же для ошибки вида:
react_devtools_backend.js:2430 UnknownErrorException {message: "The API version "2.4.456" does not match the Worker version "2.5.207".", name: "UnknownErrorException", details: "Error: The API version "2.4.456" does not match the Worker version "2.5.207"."}
рассмотрим ниже.
Ошибка вида Error: The API version .... does not match the Worker version
Эта ошибка указывает на то, что мы используем неподходящую версию pdfjs-dist для работы с нашим пакетом react-pdf, в конкретном случае:
react_devtools_backend.js:2430 UnknownErrorException {message: "The API version "2.4.456" does not match the Worker version "2.5.207".", name: "UnknownErrorException", details: "Error: The API version "2.4.456" does not match the Worker version "2.5.207"."}
-- в моем случае используется слишком новая 2.5.207 вместо требуемой 2.4.456.
В качестве решения обновим пакет (в терминале), поставив ту версию, что требует react-pdf, моем случае команда выглядела как
npm install pdfjs-dist@2.4.456
-- после чего приведенный выше вариант подключения воркера:
import { pdfjs } from 'react-pdf'; import PDFJSWorker from '!!file-loader!pdfjs-dist/build/pdf.worker.js'; pdfjs.GlobalWorkerOptions.workerSrc = PDFJSWorker;
должен заработать
- Log in to post comments
- 2315 reads