You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js 15 App Router部署后pdf.worker.mjs加载失败(MIME类型错误)

解决Next.js 15 App Router部署后pdfjs-dist Worker加载失败问题

问题根源

本地开发正常但部署后Worker加载失败,核心原因是:

  • Dockerfile中public目录的复制路径错误,导致静态资源无法被Next.js正确映射
  • Worker文件的访问路径配置或资源部署位置不匹配

解决方案

1. 修正Dockerfile的资源复制逻辑

Next.js生产环境会自动将项目根目录public下的资源映射为静态资源,不需要手动复制到.next/public。正确的Dockerfile示例如下:

# 构建阶段
FROM node:20-alpine AS builder
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile
COPY . .
RUN yarn build

# 生产运行阶段
FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV production

# 复制构建产物与必要文件
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
COPY --from=builder /app/package.json ./package.json

EXPOSE 3000
CMD ["yarn", "start"]

关键说明:直接保留根目录的public文件夹,Next.js的start命令会自动处理静态资源的路由映射,避免手动复制到.next/public导致的路径冲突。

2. 确保Worker路径配置正确

在React组件的钩子中,使用绝对路径指向public目录下的Worker文件:

import { useEffect } from 'react';
import * as pdfjsLib from 'pdfjs-dist';
import 'pdfjs-dist/web/pdf_viewer.css';

export default function PdfViewer() {
  useEffect(() => {
    // 绝对路径确保生产环境下正确访问
    pdfjsLib.GlobalWorkerOptions.workerSrc = '/pdf.worker.mjs';
  }, []);

  // PDF渲染逻辑...
}

注意:不要使用相对路径,必须以/开头,保证不同部署域名下都能正确定位资源。

3. 验证静态资源可访问性

部署完成后,直接在浏览器访问http://你的域名/pdf.worker.mjs:

  • 如果能看到Worker文件的JS代码,说明资源部署正常
  • 如果返回404或HTML页面,重新检查Dockerfile的复制步骤,确认public目录被正确复制到容器的/app/public路径下

4. 可选:无需手动放置Worker文件的方案

可以通过动态导入的方式直接引用pdfjs-dist内置的Worker,避免手动管理文件:

import { useEffect } from 'react';
import * as pdfjsLib from 'pdfjs-dist';
import 'pdfjs-dist/web/pdf_viewer.css';

export default function PdfViewer() {
  useEffect(() => {
    pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
      'pdfjs-dist/build/pdf.worker.mjs',
      import.meta.url
    ).toString();
  }, []);

  // PDF渲染逻辑...
}

这种方式下,Next.js会在构建时自动处理Worker的依赖打包,无需手动将pdf.worker.mjs放到public目录。


内容的提问来源于stack exchange,提问作者Itay Tur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 00:58:18