使用Web Worker时Vite构建报错‘Unexpected early exit’求助
问题分析
开发环境正常但生产构建报错,核心原因是Vite处理Web Worker时,@jsquash/avif的WASM依赖未被正确处理,导致构建钩子的Promise无法resolve,触发提前退出。
修复方案
方案1:配置Vite正确处理Worker中的WASM依赖
在nuxt.config.ts中添加Vite配置,确保WASM文件被正确识别并打包:
export default defineNuxtConfig({ vite: { assetsInclude: ['**/*.wasm'], worker: { format: 'es', topLevelAwait: true } } })
方案2:修改Worker的导入方式,使用动态导入
将Worker中对@jsquash/avif的导入改为动态导入,避免构建时的同步处理阻塞:
onmessage = async (val) => { const { encode } = await import('@jsquash/avif'); const avifBuffer = await encode(val.data); postMessage(avifBuffer); };
方案3:强制预构建@jsquash/avif依赖
如果上述方案无效,强制Vite预构建该依赖:
export default defineNuxtConfig({ vite: { optimizeDeps: { include: ['@jsquash/avif'] } } })
方案4:降级@jsquash/avif版本
部分新版本可能存在与Vite Worker打包的兼容性问题,尝试降级到稳定版本(比如1.1.0):
npm install @jsquash/avif@1.1.0
额外检查点
- 确保
convertToAvifFile函数中的loadedImage变量已正确定义(当前代码片段中未看到该变量赋值,可能是笔误) - 给Worker实例添加错误监听,避免构建时未捕获的异常:
convWorker.onerror = (error) => { rej(error); };
内容的提问来源于stack exchange,提问作者Apophis
相关产品推荐
相关产品推荐

