Vercel无服务器函数中pdfjs-dist部署后报错:找不到pdf.worker.js模块
问题描述
在Vercel无服务器函数的Node运行时中使用pdfjs-dist包解析PDF文件,本地运行vercel dev时一切正常,但部署后访问远程端点出现错误:
Error: Setting up fake worker failed: "Cannot find module './pdf.worker.js'"
环境信息:本地Node版本v16.16;Vercel Node版本16.x;pdfjs-dist版本^3.0.279。
差异原因
- Vercel部署时的打包逻辑与本地
vercel dev不同:本地运行时依赖的node_modules完整保留,pdfjs-dist可以直接找到同目录的pdf.worker.js;而Vercel会通过依赖分析工具(如NFT)只打包必要文件,pdf.worker.js可能未被识别为必要依赖,导致部署后缺失。 - 部署后的Vercel Serverless函数运行在沙箱环境中,文件路径结构被压缩,
pdfjs-dist默认的相对路径查找逻辑失效,无法定位到worker文件。
解决方案
方案1:显式指定Worker入口
通过导入worker的entry文件并设置全局Worker路径,避免自动查找失败:
import * as pdfjs from "pdfjs-dist/legacy/build/pdf"; import pdfjsWorker from "pdfjs-dist/legacy/build/pdf.worker.entry"; // 全局指定Worker源 pdfjs.GlobalWorkerOptions.workerSrc = pdfjsWorker; // 正常解析PDF const document = await pdfjs.getDocument(url).promise;
方案2:使用Node专用入口
如果是纯Node环境(无浏览器需求),直接使用pdfjs-dist的Node专用构建版本,无需处理Worker:
import * as pdfjs from "pdfjs-dist/legacy/build/pdf.node"; const document = await pdfjs.getDocument(url).promise;
内容的提问来源于stack exchange,提问作者mikeek
相关产品推荐
相关产品推荐

