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

Node.js引入pdfjs-dist遇ESM导入错误,求CommonJS兼容方案

解决CommonJS项目中引入pdfjs-dist的ESM兼容问题

方法1:使用动态import()(推荐,无需修改项目架构)

错误提示已给出官方可行方案:在CommonJS模块中用动态import()加载ES模块。由于动态import是异步操作,可结合async/await处理:

代码示例:

原CommonJS写法:

const pdfjs = require('pdfjs-dist');
// 后续PDF处理逻辑

修改为异步兼容写法:

// 在async函数内执行PDF操作
async function processPDF() {
  const pdfjsLib = await import('pdfjs-dist');
  // 示例:加载PDF文档
  const doc = await pdfjsLib.getDocument({ url: '目标PDF路径' }).promise;
  // 编写你的PDF处理逻辑
}

// 如需在模块顶层执行,用立即执行异步函数包裹
(async () => {
  await processPDF();
})().catch(err => console.error(err));

若不习惯async/await,也可使用链式调用:

import('pdfjs-dist').then(pdfjsLib => {
  pdfjsLib.getDocument({ url: '目标PDF路径' }).promise.then(doc => {
    // 处理PDF逻辑
  });
}).catch(err => console.error(err));

方法2:直接引入CommonJS兼容构建文件

部分版本的pdfjs-dist提供了CommonJS格式的构建包,可尝试直接引入对应文件:

const pdfjs = require('pdfjs-dist/build/pdf.cjs');

注意:若当前安装版本无该文件,可考虑降级到支持CommonJS的旧版本(如v2.x系列,但不推荐长期依赖旧版本)。

方法3:隔离ESM逻辑到独立模块

创建单独的ESM模块(如pdf-processor.mjs)封装pdfjs-dist相关逻辑:

// pdf-processor.mjs
import * as pdfjsLib from 'pdfjs-dist';

export async function loadPDF(url) {
  const doc = await pdfjsLib.getDocument({ url }).promise;
  // 封装你需要的PDF处理方法
  return doc;
}

随后在CommonJS代码中通过动态import加载该模块:

// CommonJS业务文件
async function usePDF() {
  const { loadPDF } = await import('./pdf-processor.mjs');
  const doc = await loadPDF('目标PDF路径');
  // 业务逻辑处理
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 03:27:08