pdf.js(pdfdist)踩坑workerSrc报错pdf.worker.mjs无法正确获取

目录

最近用pdf.js踩坑了几个点,其实本质都是workerSrc配置的问题,pdf.js引用了.mjs文件但又没做好处理,导致需要我们额外单独配置这一块。

第一次遇到的时候我习惯性交给AI,AI按照搜索结果修改了workerSrc配置,解决了引用的为题,但是最终部署服务器还是不能用。

后面还是人工花了些功夫把这个点搞明白,然后手动改了nginx配置才修复。

AI还得加油啊!你以后可是我们的赛博牛马

这里有两个问题!!!两个问题!!!一定要看完!!!
这里有两个问题!!!两个问题!!!一定要看完!!!
这里有两个问题!!!两个问题!!!一定要看完!!!

第一步报错

现象

pdfjsLib报错

原因

PDFJS.GlobalWorkerOptions.workerSrc 未配置,配置了就行。
main.js和vite.config.ts都要改,不复杂。

解决

javascript 复制代码
// main.js
// 手动设置workerSrc
// 设置为BASE_URL拼接,保证和部署环境路径一致
import * as PDFJS from 'pdfjs-dist';
PDFJS.GlobalWorkerOptions.workerSrc = `${import.meta.env.BASE_URL}assets/pdf.worker.mjs`;
javascript 复制代码
// vite.config.ts
export default defineConfig({
  plugins: [
    vue(),
    vueJsx(),
    ...
    // 复制 PDF.js worker 文件到输出目录
    viteStaticCopy({
      targets: [
        {
          src: 'node_modules/pdfjs-dist/build/pdf.worker.mjs',
          dest: 'assets'
        }
      ]
    })
  ],
  ...
})

结果

打包之后就能看到/dist/assets目录下面多了几个文件,这就是pdf.js需要的文件。

我们要的是pdf.worker.mjs这个文件。

现在项目文件就改完了,接下来还要改nginx配置

第二步报错【重要】

现象

现在把项目打包放到服务器上还是会报错

pdfdist 报错 Error: Setting up fake worker failed: "Failed to fetch dynamically imported module......

原因

pdf.worker.mjs文件是获取到了,不过header格式不对,文件类型需要改为js脚本文件才能被浏览器正确解析。

解决

改服务器nginx配置文件。(apache同理)

这里需要改http.types配置项,其他的文档讲得很模糊,我这里写得细一点。

目前大部分版本的nginx对文件MIME 类型配置都是在mime.types文件里列出来的,.mjs是ES模块,默认没有配置。

而我们要做的很简单,就是把.mjs类型支持加上。可以直接在http配置里加,也可以在http.types里加,任选其一即可。

【方案1】加在nginx.conf里

javascript 复制代码
// nginx.conf

http {
    include mime.types;
    default_type application/octet-stream;

    types {
        # 添加 .mjs 文件的 MIME 类型映射
        application/javascript mjs;
    }
    ...
}

【方案2】加在http.types里

javascript 复制代码
// http.types
	...
   application/javascript     js;
   application/javascript     mjs; # 添加这一行来正确处理mjs文件
   application/atom+xml       atom;
   ...

最后重启nginx

【完毕】

相关推荐
余额瞒着我当琳13 分钟前
C++11,发展历史浅谈,初始化列表和对象初始化,右值引用和移动语义
java·开发语言·c++·算法
学逆向的17 分钟前
C 宏函数
c语言·开发语言·网络安全
Code_Solitude19 分钟前
C语言:指针题型总结
c语言·开发语言
曹牧20 分钟前
Java:`tools.jar`
java·开发语言·jar
小白旗33 分钟前
PHP 严重漏洞风险提醒:如何排查运行环境并做好安全更新
开发语言·php
丑梨数据36 分钟前
法律合同知识库怎么搭:从图片压缩到私有化 RAG 的工程笔记
开发语言·笔记·c#
小羊没烦恼!38 分钟前
TypedSql:在 C# 类型系统上实现一个 SQL 查询引擎
java·linux·运维·服务器·开发语言·数据库·mysql
FLJwu40 分钟前
运动相机采购选型避坑实战|第二篇
c语言·开发语言·数码相机·运动相机·oem 量产
诚丞成1 小时前
Kavita真正好用的不是“远程阅读”:而是把NAS目录重新组织成可扫描的Library
开发语言·网络