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

Next.js集成react-pdf编译失败问题求助

在启用Turbopack的Next.js项目中解决react-pdf编译失败问题

错误原因

报错核心是Turbopack不支持webpack专属的/*webpackIgnore: true*/注释,导致pdfjs-dist中的动态import语句被强制解析,触发模块找不到的错误。

解决方案步骤

1. 强制使用CDN加载PDF Worker

在客户端组件/带'use client'的Layout中配置Worker地址,直接使用CDN资源避免本地解析问题:

'use client';
import { pdfjs } from 'react-pdf';

// 版本建议和你安装的pdfjs-dist保持一致
pdfjs.GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/4.0.379/pdf.worker.min.mjs';

2. 更新next.config.js配置

添加Turbopack别名和转译配置,避免Turbopack错误解析Worker路径:

/** @type {import('next').NextConfig} */
const nextConfig = {
  experimental: {
    turbo: {
      resolveAlias: {
        // 让Turbopack忽略Worker的本地路径解析
        'pdfjs-dist/build/pdf.worker.min.js': './empty-module.ts',
        canvas: './empty-module.ts',
      },
    },
  },
  // 转译react-pdf和pdfjs-dist,确保语法兼容Turbopack
  transpilePackages: ['react-pdf', 'pdfjs-dist'],
};

module.exports = nextConfig;

3. 确保PDF预览组件为客户端组件

给Pdfpreview组件添加'use client'指令,因为react-pdf依赖浏览器环境API:

'use client';
import { useState } from 'react';
import { Document, Page } from 'react-pdf';

function Pdfpreview() {
  const [numPages, setNumPages] = useState<number>();
  const [pageNumber, setPageNumber] = useState<number>(1);

  function onDocumentLoadSuccess({ numPages }: { numPages: number }): void {
    setNumPages(numPages);
  }

  return (
    <div>
      <Document file="somefile.pdf" onLoadSuccess={onDocumentLoadSuccess}>
        <Page pageNumber={pageNumber} />
      </Document>
      <p>
        Page {pageNumber} of {numPages}
      </p>
    </div>
  );
}

export default Pdfpreview;

4. 额外排查步骤

  • 确保安装的react-pdf和pdfjs-dist版本匹配
  • 清空.next文件夹和node_modules,重新执行npm install和npm run dev
  • 安装@types/pdfjs-dist确保TypeScript类型支持(可选)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 06:05:59