Webpack 由于"找不到模块:错误:无法解决"错误而突然编译失败



截至昨天下午,我们的Javascript单元测试套件已经开始失败。没有运行任何测试,并且 webpack 在一串模块未找到错误后报告构建失败。这是我们的构建堆栈:

节点 6.11.5(是的,我知道,很旧( 业力 1.7.1 网络包 2.2.1 反应 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 包出了问题。但如果是这种情况,没有人向任何受影响的项目(包括酶和一些ES垫片(或es-abstract项目本身报告任何问题。此外,查看一些受影响项目的 CI 构建,它们似乎仍然报告通过测试。

我们不知所措。我尝试清除node_modules并从头开始npm install,将 Node 升级到 v8 LTS,降级 Enzyme 和 React 适配器以尝试引入旧版本的 es-abstract(这不起作用,他们的 package.json 文件仍然要求^1.17.0-next.1,这对我来说毫无意义,因为其中一些版本已经有一年的历史了(。什么都没用。

这是 Webpack 或 Jest 配置的问题。

绝对路径和相对路径都可以使用,但请注意,它们的行为会略有不同。

相对路径的扫描方式与 Node 扫描node_modules类似,通过查看当前目录及其祖先(即 ./node_modules,../node_modules,等等(。

使用绝对路径,它只会在给定目录中搜索。

webpack.config.js

module.exports = {
//...
resolve: {
modules: ['node_modules']
}
};

使用相对路径进行node_modules

我遇到了这个问题,并通过在 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",
...

这导致我在根node_modules中安装了 es-abstract 1.16.3,并将 1.17.0-next.1 作为数组包含的子依赖项(以及其他(。

更改了我的 JestmoduleDirectories配置后,我的node_modules成为第一个查找位置。这就是 Jest 文档对此选项的看法:要递归搜索的目录名称数组和设置此选项将覆盖默认值,恰好是node_modules

因此,请检查此功能的配置:

  • 开玩笑的 https://jestjs.io/docs/en/configuration#moduledirectories-arraystring
  • https://webpack.js.org/configuration/resolve/webpack 的

我在维护者 github 存储库上创建了一个问题 https://github.com/ljharb/es-abstract/issues/84#issuecomment-567422831

由于我们遇到了完全相同的问题,因此我们提出了一个评论所描述的想法。在production标志下运行webpack 开发构建。对我们来说,所有源映射条目都被保留,我们的开发应用程序是完全可调试的。因此,我们将其用作解决方法。

如果将来这种情况发生中断,我们可能会分叉所有带有 semver 范围依赖项的存储库,并将其托管为我们真正过时的遗留存储库。

相关内容

  • 没有找到相关文章

最新更新