截至昨天下午,我们的JavaScript单元测试套件开始出现故障。没有任何测试运行,并且Webpack报告了一系列模块未找到错误后构建失败。以下是我们的构建堆栈:
Node 6.11.5(是的,我知道,非常旧) Karma 1.7.1 Webpack 2.2.1 React 15.6.2
我们使用Karma来运行单元测试。大多数测试套件涉及React,因此我们使用Webpack构建所有内容。为此,我们导入我们的webpack配置文件,然后将各种值插入Karma webpack配置中。
直接使用Webpack构建脚本很好,但是当我们尝试运行“karma start”时,会遇到许多这样的错误:
当我手动检查
我们不知道该怎么办。我已经尝试了清除
Node 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
所有这些问题似乎都与es-abstract
有关,我们注意到昨天它发布了一个新版本(1.17.0-next.1)。这正是一切开始失败的时间。尽管如此,该软件包似乎已经成功下载和安装:
ubuntu@ip-172-17-108-178:/workspace/assets-build/build-js$ npm list es-abstract
admin@0.0.1 /workspace/assets-build/build-js
├─┬ enzyme@3.10.0
│ ├─┬ array.prototype.flat@1.2.3
│ │ └── es-abstract@1.17.0-next.1
│ ├─┬ object.entries@1.1.1
│ │ └── es-abstract@1.17.0-next.1
│ └─┬ string.prototype.trim@1.2.0
│ └── es-abstract@1.16.3 deduped
├─┬ enzyme-adapter-react-15@1.4.1
│ ├─┬ enzyme-adapter-utils@1.12.1
│ │ ├─┬ airbnb-prop-types@2.15.0
│ │ │ └─┬ array.prototype.find@2.1.0
│ │ │ └── es-abstract@1.16.3 deduped
│ │ └─┬ object.fromentries@2.0.2
│ │ └── es-abstract@1.17.0-next.1
│ └─┬ object.values@1.1.1
│ └── es-abstract@1.17.0-next.1
├─┬ eslint-plugin-jsx-a11y@6.2.3
│ └─┬ array-includes@3.1.0
│ └── es-abstract@1.17.0-next.1
└─┬ object.values@1.0.4
└── es-abstract@1.16.3
当我手动检查
node_modules
目录时,我可以看到所有的文件,这些文件基于对es-abstract Github的粗略检查而言都是符合预期的。但是我无法弄清楚为什么Webpack显然无法看到这些文件,尽管它们已经安装在正确的位置。除非es-abstract包有问题,否则我也无法弄清楚为什么这会突然在昨天发生故障。但如果是这种情况,那么没有人向受影响的项目(包括Enzyme和一些ES shims)或es-abstract项目本身报告任何问题。此外,查看一些受影响项目的CI构建,它们似乎仍然报告测试通过。我们不知道该怎么办。我已经尝试了清除
node_modules
并从头开始进行npm install
,将Node升级到v8 LTS,将Enzyme和React适配器降级以尝试拉取旧版本的es-abstract(这不起作用,因为它们的package.json文件仍然要求^1.17.0-next.1
,这对我来说毫无意义,因为其中一些版本已经一年了)。但什么都没用。