如何在nest中导入esModule?

问题描述 投票:0回答:1
import { Injectable, OnModuleInit } from '@nestjs/common';

@Injectable()
export class PotatoService implements OnModuleInit {
  constructor() {}
  async onModuleInit(): Promise<void> {
    const chalk = (await import('chalk')).default;
    console.log(chalk.blue('potato service init'));
  }

}

我尝试使用 import(),但出现错误

node:internal/process/promises:289
            triggerUncaughtException(err, true /* fromPromise */);
            ^

Error [ERR_REQUIRE_ESM]: require() of ES Module /Users/potato/Desktop/learn/nest-demo/node_modules/.pnpm/[email protected]/node_modules/chalk/source/index.js from /Users/potato/Desktop/learn/nest-demo/dist/bootstrap.js not supported.
Instead change the require of index.js in /Users/potato/Desktop/learn/nest-demo/dist/bootstrap.js to a dynamic import() which is available in all CommonJS modules.
    at /Users/potato/Desktop/learn/nest-demo/dist/bootstrap.js:64:93
    at async bootstrap (/Users/potato/Desktop/learn/nest-demo/dist/bootstrap.js:64:20) {
  code: 'ERR_REQUIRE_ESM'
}

Node.js v20.10.0

那么如何在nest中导入仅esmodule的包?

使用 import() 不是从 xxx 导入 xxx,但是不起作用

node.js typescript nest
1个回答
0
投票

Chalk 版本 5 是一个 pure 'ESM' 包,不能直接在您当前的 CommonJS 项目中使用。以下是您的选择:

  1. 将您的项目迁移到 ESM(最佳):这是最干净的解决方案。然后,您的项目可以无缝使用 ESM 和 CommonJS 模块。
  2. 安装 Chalk 版本 4(简单):快速修复,但您可能会错过最新的 Chalk 功能。请参阅演示此处
  3. 使用 Node.js 22(不推荐):需要
    --experimental-require-module
    标志才能在 CommonJS 中导入 ESM,这并不理想。
  4. 使用“动态导入”安装 Chalk 5:您缺少一些必要的配置。例如,无论使用动态导入,您都需要 TypeScript 4.7 或更高版本。 有关所需配置的更多信息,请查看此链接

建议:迁移到 ESM 是实现更有组织、更现代的项目结构的最佳长期方法。”

© www.soinside.com 2019 - 2024. All rights reserved.