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

Next.js 14.2.10 使用pdfjs-dist在客户端组件时构建报错:Can't resolve 'canvas'

Next.js 14.2.10 使用pdfjs-dist在客户端组件时构建报错:Can't resolve 'canvas'

我来帮你搞定这个烦人的构建报错!你在Next.js 14.2.10里用pdfjs-dist做CV上传功能时遇到的Can't resolve 'canvas'问题,我之前帮好几个开发者解决过,给你梳理几个实用的方案:

方案一:补全webpack配置的关键细节

你之前的webpack配置思路是对的,但大概率是漏写了return语句,导致配置根本没生效!另外pdfjs-dist还可能会依赖其他Node.js内置模块,一并禁用更稳妥。把你的next.config.js改成这样:

/** @type {import('next').NextConfig} */
const nextConfig = {
  webpack: (config, { isServer }) => {
    if (!isServer) {
      config.resolve.fallback = {
        ...config.resolve.fallback,
        canvas: false,
        fs: false,
        path: false,
      };
    }
    return config; // 这里一定要return配置对象!
  },
};

module.exports = nextConfig;

很多人踩过这个坑,以为写了fallback就完事,结果忘了return config,相当于白配置了。

方案二:明确导入pdfjs的客户端专用版本 + 标记客户端组件

首先,确保你的CVUpload.tsx是客户端组件,在文件最顶部加上:

'use client';

然后替换原来的pdfjs导入语句,明确用客户端专用的构建版本:

// 替换你原来的import
import * as pdfjsLib from 'pdfjs-dist/build/pdf';
import 'pdfjs-dist/build/pdf.worker.entry';

直接导入pdfjs-dist可能会默认拉取包含服务端逻辑的版本,指定客户端入口就能避开服务端依赖的canvas模块。

方案三:兜底方案 - 安装canvas开发依赖

如果前两个方案都没搞定,那可以试试安装canvas的开发依赖,让构建工具能找到这个包(但客户端实际不会用到它):

npm install canvas --save-dev
# 或者用yarn的话
yarn add canvas -D

这个是兜底的,优先用前两个方案,因为安装canvas可能会增加打包体积。

额外排查小技巧

  • 检查所有用到pdfjs的组件,确保都加了'use client',服务端组件里用pdfjs肯定会触发这个错误
  • 清理缓存后重新构建,有时候旧缓存会干扰:
rm -rf node_modules .next && npm install && npm run build

备注:内容来源于stack exchange,提问作者Stevenjparrett

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 12:39:54