web-dev-qa-db-ja.com

Jestセットアップ「SyntaxError:Unexpected token export」

現在テストのない既存のプロジェクトにテストを実装しています。私のテストはnode_modules/インポートをコンパイルできません。

/Users/me/myproject/node_modules/lodash-es/lodash.js:10
export { default as add } from './add.js';
^^^^^^
SyntaxError: Unexpected token export

  at transformAndBuildScript (node_modules/jest-runtime/build/transform.js:320:12)
  at Object.<anonymous> (app/reducers/kind_reducer.js:2:43)
  at Object.<anonymous> (app/reducers/index.js:12:47)

私が見つけた回避策は、次のようなpackage.json jest configの「ホワイトリスト」node_modulesです。

"jest": {
    "transformIgnorePatterns": [
      "!node_modules/"
    ]
  }

これは、node_modules/lodash-es/lodash.jsをインポートする簡単なテストを実行するのに1分以上かかるため、ハックのように見えます。

助けや指示はありがたいです、ありがとう!

25
Cory Robinson

これを.jestconfigに追加する必要がありました。

"transformIgnorePatterns": [
  "<rootDir>/node_modules/(?!lodash-es)"
]
29
Yangshun Tay

上記の解決策のどれもうまくいかなかった場合は、あなたの趣味でこれを試すことができます

"moduleNameMapper": {
    "^lodash-es$": "lodash"
}

ランタイムのテスト中に、lodash-esをcommonjsバージョンに置き換えます。

15
OPatel

より完全な回答をここに投稿:

Node_modulesは非常に大きいため、デフォルトではJestはnode_modulesを変換しません。ほとんどのノードモジュールは、ES5コードを公開するためにパッケージ化されています。これは、ES5コードをさらに変換することなく実行できるためです(そして、大部分は後方互換性があります)。

あなたの場合、lodash-esはESモジュールを具体的に公開します。ESモジュールはJestがbabel経由でビルドする必要があります。

ホワイトリストを絞り込んで、Jestがnode_modules内のすべてのjavascriptファイルをbabel経由で渡そうとしないようにすることができます。

あなたの場合の正しい構成は次のとおりです:

"jest": {
  "transformIgnorePatterns": [
    "/!node_modules\\/lodash-es/"
  ]
}
14
Lewis Chung