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

如何在NestJS中导入ESM模块?引入Ora包遇ERR_REQUIRE_ESM错误

解决NestJS中使用Ora包出现的ERR_REQUIRE_ESM错误

你的问题核心是Ora v6+是纯ESM包,而NestJS默认的开发构建(nest start --watch)使用Webpack将代码编译为CommonJS,导致require()加载ESM包时触发错误。以下是几种可行的解决方案:

方案1:将项目切换为完全ESM模式

让整个项目采用ESM规范,从根源避免CommonJS与ESM的兼容性问题:

  1. 修改package.json,添加type字段:
{
  "type": "module"
}
  1. 更新tsconfig.json的编译配置:
{
  "compilerOptions": {
    "module": "ESNext",
    "moduleResolution": "Bundler",
    "target": "ES2022",
    "lib": ["ES2022"],
    "outDir": "./dist",
    "esModuleInterop": true,
    "skipLibCheck": true,
    "strict": true,
    "allowSyntheticDefaultImports": true
  }
}
  1. 调整nest-cli.json以适配ESM的Webpack构建:
{
  "$schema": "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "deleteOutDir": true,
    "webpack": true,
    "webpackConfig": "./webpack.config.js"
  }
}
  1. 创建webpack.config.js配置文件:
module.exports = (options) => ({
  ...options,
  output: {
    ...options.output,
    libraryTarget: 'module',
    module: true,
    filename: '[name].mjs'
  },
  experiments: {
    outputModule: true
  },
  resolve: {
    ...options.resolve,
    extensions: ['.mjs', '.js', '.ts']
  }
});
  1. 之后直接使用静态导入即可:
import ora from 'ora';

const spinner = ora('加载中...').start();

方案2:降级Ora到支持CommonJS的版本

如果不想改动项目模块规范,可以降级到Ora v5.x版本(该版本同时支持CommonJS和ESM):

npm uninstall ora
npm install ora@5

安装完成后,原有的静态导入或动态导入方式都能正常工作,无需额外配置。

方案3:配置Webpack强制动态导入(针对现有CommonJS项目)

若坚持使用CommonJS项目结构,需确保Webpack不对Ora的导入做静态转译:

  1. 确保代码中使用动态导入:
async function runTask() {
  const { default: ora } = await import('ora');
  const spinner = ora('处理中...').start();
  // 后续逻辑
}
  1. 修改webpack.config.js,禁用对Ora的静态分析:
module.exports = (options) => ({
  ...options,
  module: {
    ...options.module,
    rules: [
      ...options.module.rules,
      {
        test: /ora/,
        parser: { amd: false, commonjs: false }
      }
    ]
  }
});

这种方式让Webpack保留动态导入的代码,避免编译为require()语句。


内容的提问来源于stack exchange,提问作者Islam Y-

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 22:40:12