解决 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 模块。可以使用以下命令来安装它:shellnpm install --save-dev babel-jest安装完成后,我们需要在项目的根目录下创建一个名为 "babel.config.js" 的文件,并在该文件中配置 Babel 的转换规则。以下是一个简单的示例配置:
javascriptmodule.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" 的文件,并在该文件中添加以下配置:
javascriptmodule.exports = { transform: { "^.+\\.tsx?$": "babel-jest", },};在上面的配置中,我们将 ".tsx" 和 ".ts" 后缀的文件使用 "babel-jest" 进行转换。完成以上配置后,我们重新运行 Jest 测试,就不再会出现 "必须使用 import 来加载 ES 模块" 的错误了。案例代码假设我们有一个名为 "mathUtils.ts" 的 ES 模块,其中包含了一个简单的加法函数:
typescriptexport function add(a: number, b: number): number { return a + b;}现在,我们想在 Jest 测试文件中引入该模块,并测试它的功能。在 "mathUtils.test.ts" 文件中,我们可以按照以下方式引入和使用该模块:
typescriptimport { 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 的开发工作。