部署至Vercel后tesseract.js出现ENOENT文件缺失错误求助
本地运行正常的代码部署到Vercel后出现异常,使用tesseract.js包时提示找不到指定的WASM文件,报错信息如下:
Aborted(Error: ENOENT: no such file or directory, open '/var/task/node_modules/tesseract.js-core/tesseract-core-simd.wasm')
2023-01-04T06:54:46.648Z 7c70e537-4119-465d-924c-f90026df64fc ERROR Uncaught Exception {"errorType":"RuntimeError","errorMessage":"Aborted(Error: ENOENT: no such file or directory, open '/var/task/node_modules/tesseract.js-core/tesseract-core-simd.wasm'). Build with -sASSERTIONS for more info.","stack":["RuntimeError: Aborted(Error: ENOENT: no such file or directory, open '/var/task/node_modules/tesseract.js-core/tesseract-core-simd.wasm'). Build with -sASSERTIONS for more info."," at n (/var/task/node_modules/tesseract.js-core/tesseract-core-simd.js:18:375)"," at Ua (/var/task/node_modules/tesseract.js-core/tesseract-core-simd.js:19:317)"," at /var/task/node_modules/tesseract.js-core/tesseract-core-simd.js:20:394"]}
Unknown application error occurred Runtime .Unknown
解决方案
手动指定WASM文件路径:初始化Tesseract Worker时,通过
corePath参数指定WASM文件的正确位置,推荐使用CDN加载避免本地路径问题:const { createWorker } = require('tesseract.js'); const worker = createWorker({ corePath: 'https://unpkg.com/tesseract.js-core@4.0.0/tesseract-core-simd.wasm', });配置Vercel包含WASM文件:在项目根目录创建
vercel.json,添加规则确保WASM文件被包含到部署包中:{ "functions": { "api/**/*.js": { "includeFiles": "node_modules/tesseract.js-core/*.wasm" } } }切换非SIMD版本:若Vercel环境对SIMD支持有限,改用非SIMD版本的WASM文件:
const worker = createWorker({ corePath: 'https://unpkg.com/tesseract.js-core@4.0.0/tesseract-core.wasm', });调整打包工具配置:如果使用Webpack等工具,确保WASM文件被正确处理,添加对应规则:
module.exports = { module: { rules: [ { test: /\.wasm$/, type: 'asset/resource', }, ], }, };
内容的提问来源于stack exchange,提问作者Neeraj Negi

