如何在带有 NestJS 的 CommonJS 构建中使用动态 import(),特别是针对 @octokit/rest 库?

问题描述 投票:0回答:1

我正在处理一个 NestJS 项目,我需要使用 @octokit/rest 库,它是一个 ES 模块。但是,我的项目设置为使用 CommonJS 构建。当尝试通过 require() 使用该库时,我遇到了错误,因为 @octokit/rest 库不支持 CommonJS 导入。

为了解决这个问题,我尝试在 CommonJS 环境中使用动态 import() ,但是在构建项目后, import() 仍然以不适用于 CommonJS 的方式进行编译。这是我尝试过的:

async createRepository(accessToken: string, repositoryName: string) {
    const { Octokit } = await import('@octokit/rest');
    const octokit = new Octokit({
        auth: accessToken,
    });

    const response = await octokit.repos.createForAuthenticatedUser({
        name: repositoryName,
    });

    return response.data;
}

遇到错误:

Error [ERR_REQUIRE_ESM]: require() of ES Module C:\Users\...\node_modules\@octokit\rest\dist-src\index.js from C:\Users\...\dist\app.service.js not supported.

如何确保 @octokit/rest 在 CommonJS 构建中动态导入而不会导致兼容性问题?有没有办法让动态导入在此设置中工作,或者有没有更好的方法在 CommonJS 项目中使用 ES 模块?

nestjs github-api octokit
1个回答
0
投票

对于nodejs v22+,您可以只使用

--experimental-require-module
nodejs 标志。所以:
nest start -e "node --experimental-require-module"
应该够了

请注意,Jest 不支持此标志,因此它会失败

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