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

目录

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

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

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

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

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

第一步报错

现象

pdfjsLib报错

原因

PDFJS.GlobalWorkerOptions.workerSrc 未配置,配置了就行。
main.jsvite.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

【完毕】

相关推荐
独自破碎E10 小时前
【滑动窗口+字符计数数组】LCR_014_字符串的排列
android·java·开发语言
2601_9494800610 小时前
【无标题】
开发语言·前端·javascript
Jack_David10 小时前
Java如何生成Jwt之使用Hutool实现Jwt
java·开发语言·jwt
css趣多多10 小时前
Vue过滤器
前端·javascript·vue.js
瑞雪兆丰年兮10 小时前
[从0开始学Java|第六天]Java方法
java·开发语言
u01092727111 小时前
模板编译期排序算法
开发语言·c++·算法
datalover11 小时前
CompletableFuture 使用示例
java·开发语言
●VON11 小时前
React Native for OpenHarmony:项目目录结构与跨平台构建流程详解
javascript·学习·react native·react.js·架构·跨平台·von
m0_6860416111 小时前
C++中的适配器模式变体
开发语言·c++·算法
清风~徐~来11 小时前
【视频点播系统】WebSocketpp 介绍及使用
开发语言