👞
JestでESMのパッケージを読み込んだときにエラーが発生する問題
Jestでテストを行う際に、ESMのパッケージ(例えばnode-fetch
など)を読み込むと次のエラーが発生します。
jest SyntaxError: Cannot use import statement outside a module.
環境
- Node.js v16.13.2
- Jest v27.5.1
- @swc/core v1.2.139
- @swc/jest v0.2.17
原因
ESMのパッケージがCommonJSに変換されていないのが原因です。
Jestはデフォルトでnode_modules
以下のコードを変換しません。
なので、node_modules
以下のパッケージでESMが使われていると、CommonJS環境でESMが出てきてしまいエラーが発生します。
対応
ESMのパッケージを変換してあげるといいです。
// jest.config.js
// esmが使われているパッケージを宣言
const esmPackages = [
"esm-package1",
"esm-package2",
];
module.exports = {
...
transformIgnorePatterns: [
// esmが使われているパッケージを除いてIgnoreする
`node_modules/(?!(${esmPackages.join("|")})/)`,
],
}
Discussion