昨日の午後の時点で、Javascriptユニットテストスイートが失敗し始めました。 Moduleが見つからないというエラーが発生した後、テストは実行されず、webpackはビルドエラーを報告します。これが私たちのビルドスタックです:
ノード6.11.5(そうですね、とても古いです)Karma 1.7.1 Webpack 2.2.1 React 15.6.2
Karmaを使用して単体テストを実行します。ほとんどのテストスイートにはReactが含まれるため、Webpackを使用してすべてをビルドします。これを行うには、webpack構成をインポートしてから、さまざまな値をKarma webpack構成にプラグインします。
Webpackを使用して直接スクリプトを作成することは問題ありませんが、karma start
を実行しようとすると、次のようなエラーが多数発生します。
ERROR in ./~/object.entries/implementation.js
Module not found: Error: Can't resolve 'es-abstract/2019/RequireObjectCoercible' in '/jenkins/workspace/RFD/DCS/assets-build/build-js/node_modules/object.entries'
@ ./~/object.entries/implementation.js 3:29-79
@ ./~/object.entries/index.js
@ ./~/enzyme/build/Utils.js
@ ./~/enzyme/build/ReactWrapper.js
@ ./~/enzyme/build/index.js
@ ../sources/admin/js/pages/sponsored/organic_flyers/tests/DealerAddButton.spec.jsx
ERROR in ./~/object.fromentries/implementation.js
Module not found: Error: Can't resolve 'es-abstract/2019/AddEntriesFromIterable' in '/jenkins/workspace/RFD/DCS/assets-build/build-js/node_modules/object.fromentries'
@ ./~/object.fromentries/implementation.js 3:29-79
@ ./~/object.fromentries/index.js
@ ./~/enzyme-adapter-utils/build/Utils.js
@ ./~/enzyme-adapter-utils/build/index.js
@ ./~/enzyme-adapter-react-15/build/ReactFifteenAdapter.js
@ ./~/enzyme-adapter-react-15/build/index.js
@ ../sources/admin/js/pages/sponsored/organic_flyers/tests/DealerAddButton.spec.jsx
ERROR in ./~/object.fromentries/implementation.js
Module not found: Error: Can't resolve 'es-abstract/2019/CreateDataPropertyOrThrow' in '/jenkins/workspace/RFD/DCS/assets-build/build-js/node_modules/object.fromentries'
@ ./~/object.fromentries/implementation.js 4:32-85
@ ./~/object.fromentries/index.js
@ ./~/enzyme-adapter-utils/build/Utils.js
@ ./~/enzyme-adapter-utils/build/index.js
@ ./~/enzyme-adapter-react-15/build/ReactFifteenAdapter.js
@ ./~/enzyme-adapter-react-15/build/index.js
@ ../sources/admin/js/pages/sponsored/organic_flyers/tests/DealerAddButton.spec.jsx
ERROR in ./~/object.fromentries/implementation.js
Module not found: Error: Can't resolve 'es-abstract/2019/Get' in '/jenkins/workspace/RFD/DCS/assets-build/build-js/node_modules/object.fromentries'
@ ./~/object.fromentries/implementation.js 5:10-41
@ ./~/object.fromentries/index.js
@ ./~/enzyme-adapter-utils/build/Utils.js
@ ./~/enzyme-adapter-utils/build/index.js
@ ./~/enzyme-adapter-react-15/build/ReactFifteenAdapter.js
@ ./~/enzyme-adapter-react-15/build/index.js
@ ../sources/admin/js/pages/sponsored/organic_flyers/tests/DealerAddButton.spec.jsx
これらの問題はすべて、昨日新しいリリース(1.17.0-next.1)があったことに気付いたes-abstract
に関係しているようです。これは、すべてが失敗し始めた頃です。そうは言っても、パッケージは正しくダウンロードおよびインストールされているようです:
ubuntu@ip-172-17-108-178:/workspace/assets-build/build-js$ npm list es-abstract
[email protected] /workspace/assets-build/build-js
├─┬ [email protected]
│ ├─┬ [email protected]
│ │ └── [email protected]
│ ├─┬ [email protected]
│ │ └── [email protected]
│ └─┬ [email protected]
│ └── [email protected] deduped
├─┬ [email protected]
│ ├─┬ [email protected]
│ │ ├─┬ [email protected]
│ │ │ └─┬ [email protected]
│ │ │ └── [email protected] deduped
│ │ └─┬ [email protected]
│ │ └── [email protected]
│ └─┬ [email protected]
│ └── [email protected]
├─┬ [email protected]
│ └─┬ [email protected]
│ └── [email protected]
└─┬ [email protected]
└── [email protected]
そして、手動でnode_modules
ディレクトリーを検査すると、es-abstract Githubのざっと調べた結果に基づいて、予想されるすべてのファイルを確認できます。これらのファイルが正しい場所にインストールされているにもかかわらず、Webpackがどうしてこれらのファイルを表示できないのか、私にはわかりません。また、es-abstractパッケージに問題がない限り、なぜこれが昨日突然中断するのか理解できません。しかし、それが事実である場合、影響を受けるプロジェクト(Enzymeおよび一部のES shimを含む)やes-abstractプロジェクト自体には誰も問題を報告していません。また、影響を受けるいくつかのプロジェクトのCIビルドを見ると、それらはすべてテストに合格したことを報告しているように見えます。
私たちは何をすべきか途方に暮れています。 node_modules
とnpm install
ingを最初から消去して、Nodeをv8 LTSにアップグレードし、EnzymeとReactをダウングレードしました古いバージョンのes-abstractを試してプルするアダプター(動作しません。package.jsonファイルは^1.17.0-next.1
を要求しますが、これらのリリースの一部は1年前のものであるため、意味がありません) 。何も機能しません。
この問題があり、Jestでモジュールの解像度設定を修正することで解決しました。
現在の状態で、私のパッケージロックには以下が含まれます:
"array.prototype.find": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.0.tgz",
"integrity": "sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg==",
"requires": {
"define-properties": "^1.1.3",
"es-abstract": "^1.13.0"
}
},
そして
"array-includes": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.0.tgz",
"integrity": "sha512-ONOEQoKrvXPKk7Su92Co0YMqYO32FfqJTzkKU9u2UpIXyYZIzLSvpdg4AwvSw4mSUW0czu6inK+zby6Oj6gDjQ==",
"dev": true,
"requires": {
"define-properties": "^1.1.3",
"es-abstract": "^1.17.0-next.0"
},
"dependencies": {
"es-abstract": {
"version": "1.17.0-next.1",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0-next.1.tgz",
...
これにより、ルートノード_モジュールにes-abstract 1.16.3がインストールされ、(特に)array-includesのサブ依存関係として1.17.0-next.1がインストールされました。
私のJest moduleDirectories
configを変更すると、私のrootnode_modulesが最初の検索場所になります。これは、Jestのドキュメントがこのオプションについて言っていることです:再帰的に検索されるディレクトリ名の配列upこのオプションを設定すると、デフォルトがオーバーライドされますが、これはたまたまnode_modules
です。
この機能の構成を確認してください:
メンテナのgithubリポジトリに問題を作成しました https://github.com/ljharb/es-abstract/issues/84#issuecomment-567422831
まったく同じ問題が発生しているので、コメントで説明されているアイデアを採用しました。 production
flagの下でwebpack開発ビルドを実行します。私たちにとって、すべてのソースマップエントリは保持され、開発アプリは完全にデバッグ可能です。したがって、これを回避策として使用します。
もしそれが将来破綻するなら、私たちはおそらくサーバーの範囲に依存するすべてのリポジトリをフォークし、本当に古いレガシーリポジトリのためにそれをホストします。