Node_modules 中带有 ES 模块的 Jest Typescript 错误 - 必须使用 import 来加载 ES 模块:

作者:编程家 分类: typescript 时间:2025-07-23

解决 Node_modules 中带有 ES 模块的 Jest Typescript 错误 - 必须使用 import 来加载 ES 模块:

在使用 Jest 和 Typescript 进行开发时,我们可能会遇到一个常见的错误,即 "必须使用 import 来加载 ES 模块"。这个错误通常发生在我们试图在 Jest 测试文件中引入 Node_modules 中的 ES 模块时。本文将介绍这个错误的原因,以及如何解决它。

问题原因

这个错误的原因在于 Jest 默认将 Node_modules 文件夹下的所有模块视为 CommonJS 模块,而不是 ES 模块。因此,当我们试图在 Jest 测试文件中使用 import 语句引入 ES 模块时,就会出现这个错误。

解决方法

要解决这个错误,我们需要告诉 Jest 如何正确地处理 Node_modules 中的 ES 模块。我们可以通过配置 Jest 的 transform 配置选项来实现这一点。

首先,我们需要安装一个名为 "babel-jest" 的包,它将帮助我们将 ES 模块转换为 CommonJS 模块。可以使用以下命令来安装它:

shell

npm install --save-dev babel-jest

安装完成后,我们需要在项目的根目录下创建一个名为 "babel.config.js" 的文件,并在该文件中配置 Babel 的转换规则。以下是一个简单的示例配置:

javascript

module.exports = {

presets: [

[

"@babel/preset-env",

{

targets: {

node: "current",

},

},

],

"@babel/preset-typescript",

],

};

在上面的配置中,我们使用了 "@babel/preset-env" 和 "@babel/preset-typescript" 这两个预设,用于将 ES 模块和 Typescript 代码转换为 CommonJS 模块和标准的 JavaScript 代码。

接下来,我们需要在 Jest 的配置文件中指定使用 "babel-jest" 进行转换。可以在项目的根目录下创建一个名为 "jest.config.js" 的文件,并在该文件中添加以下配置:

javascript

module.exports = {

transform: {

"^.+\\.tsx?$": "babel-jest",

},

};

在上面的配置中,我们将 ".tsx" 和 ".ts" 后缀的文件使用 "babel-jest" 进行转换。

完成以上配置后,我们重新运行 Jest 测试,就不再会出现 "必须使用 import 来加载 ES 模块" 的错误了。

案例代码

假设我们有一个名为 "mathUtils.ts" 的 ES 模块,其中包含了一个简单的加法函数:

typescript

export function add(a: number, b: number): number {

return a + b;

}

现在,我们想在 Jest 测试文件中引入该模块,并测试它的功能。在 "mathUtils.test.ts" 文件中,我们可以按照以下方式引入和使用该模块:

typescript

import { add } from "../Node_modules/mathUtils";

test("add function should return the sum of two numbers", () => {

expect(add(2, 3)).toBe(5);

});

在上面的示例代码中,我们使用 import 语句将 "mathUtils.ts" 模块引入到测试文件中,并使用 add 函数进行测试。

通过配置 Jest 的 transform 选项,我们可以解决 Node_modules 中带有 ES 模块的 Jest Typescript 错误 - 必须使用 import 来加载 ES 模块。通过使用 "babel-jest" 包和 Babel 的转换规则,我们可以让 Jest 正确地处理 Node_modules 中的 ES 模块,并成功进行测试。

希望本文能帮助到遇到类似问题的开发者,使他们能够更顺利地进行 Jest 和 Typescript 的开发工作。