在Vercel中调用pdf.js包

在Vercel里直接运行pdf.js包

const pdfjsLib = require("pdfjs-dist/es5/build/pdf.js");

会报下面的错:

Unhandled rejection: Error: Setting up fake worker failed: "Cannot find module './pdf.worker.js'

这个文件里面的代码大概是这样的:

if (_is_node.isNodeJS && typeof require === "function") {
isWorkerDisabled = true;
fallbackWorkerSrc = "./pdf.worker.js";
} else if ((typeof document === "undefined" ? "undefined" : _typeof(document)) === "object" && "currentScript" in document) {
var pdfjsFilePath = document.currentScript && document.currentScript.src;

if (pdfjsFilePath) {
    fallbackWorkerSrc = pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, ".worker$1$2");
}
}

这个pdf.worker.js文件确实存在,没有理由Cannot find module,怀疑是相对路径问题,将其修改为

fallbackWorkerSrc = __dirname + "/pdf.worker.js";

问题得到解决。

总体解决方法

编译完成后需要手动更改这一行代码,Vercel支持在package.json中指定自定义的编译步骤:

"scripts": {
    "now-build": "node build.js"
}

build.js文件用于完成上述替换:

const fs = require('fs');
const dir = 'node_modules/pdfjs-dist/es5/build/pdf.js';
const content = fs.readFileSync(dir, { encoding: 'utf-8' });
fs.writeFileSync(dir, content.replace('"./pdf.worker.js";', `__dirname + "/pdf.worker.js";`))

完整项目例子:https://github.com/wangsijie/pdf2jpg/tree/master/examples/vercel

文章原始链接:https://sijie.wang/posts/vercel-pdfjs/

本站文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请保留原始链接