👞

JestでESMのパッケージを読み込んだときにエラーが発生する問題

2022/02/18に公開

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