Next.js+TypeScript中使用pdfjs-dist报错:找不到pdf.worker.js模块
解决pdfjs-dist在Next.js服务端路由中找不到pdf.worker.js的问题
错误原因
这个错误是因为pdfjs-dist依赖独立的Worker脚本处理PDF文件,但在Next.js服务端环境中,它无法自动定位到Worker文件的正确路径,导致加载失败。
解决方案
不需要额外添加文件,只需调整代码配置Worker的正确路径即可。以下是两种可行的修复方式:
方式一:使用官方提供的Worker入口模块
直接导入pdfjs-dist包内的Worker入口文件,并配置给GlobalWorkerOptions:
import { NextResponse } from "next/server"; import * as PDFJS from 'pdfjs-dist'; import { TextItem } from 'pdfjs-dist/types/src/display/api'; import pdfjsWorker from 'pdfjs-dist/build/pdf.worker.entry.js'; // 配置Worker源 PDFJS.GlobalWorkerOptions.workerSrc = pdfjsWorker; export async function POST() { let myFiledata = await fetch("url to my S3 bucket") if (myFiledata.ok) { const arrayBuffer = await myFiledata.arrayBuffer(); let pdfDoc = await PDFJS.getDocument({ data: arrayBuffer }).promise; const numPages = pdfDoc.numPages; let fullText = ''; for (let i = 0; i < numPages; i++) { let page = await pdfDoc.getPage(i + 1); let textContent = await page.getTextContent(); const pageText = textContent.items.map((item) => (item as TextItem).str).join(' '); fullText += pageText + '\n'; console.log(`Page ${i+1} text:`, pageText); } return new NextResponse("Success", { status: 200 }); } else { return new NextResponse("Internal Error", { status: 500 }); } }
方式二:使用require.resolve定位Worker文件路径
如果上述方式不生效,可以通过Node.js的require.resolve获取Worker文件的绝对路径:
import { NextResponse } from "next/server"; import * as PDFJS from 'pdfjs-dist'; import { TextItem } from 'pdfjs-dist/types/src/display/api'; import { createRequire } from 'module'; const require = createRequire(import.meta.url); // 通过require.resolve获取Worker文件的绝对路径 PDFJS.GlobalWorkerOptions.workerSrc = require.resolve('pdfjs-dist/build/pdf.worker.js'); export async function POST() { // 剩余代码与方式一一致 }
备选方案:使用兼容服务器环境的Legacy构建
如果遇到现代构建版本的兼容性问题,可以切换到pdfjs-dist的Legacy版本:
import * as PDFJS from 'pdfjs-dist/legacy/build/pdf'; import pdfjsWorker from 'pdfjs-dist/legacy/build/pdf.worker.entry.js'; PDFJS.GlobalWorkerOptions.workerSrc = pdfjsWorker;
故障排查
- 确保已正确安装依赖:执行
npm install pdfjs-dist或yarn add pdfjs-dist - 清理缓存并重新安装依赖:
rm -rf node_modules package-lock.json && npm install - 检查node_modules/pdfjs-dist/build目录下是否存在pdf.worker.js文件
内容的提问来源于stack exchange,提问作者Gavin Alfaro
相关产品推荐
相关产品推荐

