webpack 5.64.4生产构建报ERR_WORKER_INVALID_EXEC_ARGV错误求助
webpack 5.64.4生产构建中断问题排查求助
我在使用webpack 5.64.4执行生产构建时出现错误导致构建中断,所用相关依赖版本如下:
webpack - 5.64.4 jest - 26.6.2 nrwl - 12.10.0 node - 14.16
我怀疑问题和webpack官方issue 14859相关,但暂未定位到确切根因。构建从11月29日该issue的修复上线后开始失败,本地macOS环境运行正常,但测试环境构建失败,我暂时不希望升级jest版本,恳请各位提供排查或解决思路,若需补充更多信息我会及时提供。
依赖详情及错误栈
jest-worker依赖安装详情如下:
npm ls jest-worker ├─┬ @angular-devkit/build-angular@12.2.13 │ ├─┬ css-minimizer-webpack-plugin@3.0.2 │ │ └── jest-worker@27.3.1 │ └─┬ terser-webpack-plugin@5.1.4 │ └── jest-worker@27.3.1 deduped ├─┬ @nrwl/nest@12.10.0 │ └─┬ @nrwl/jest@12.10.0 │ ├─┬ @jest/reporters@27.2.2 │ │ ├─┬ jest-haste-map@27.4.2 │ │ │ └── jest-worker@27.4.2 │ │ └── jest-worker@27.3.1 deduped │ └─┬ jest-config@27.2.2 │ └─┬ jest-runner@27.4.2 │ └── jest-worker@27.4.2 ├─┬ @storybook/addon-essentials@6.3.12 │ └─┬ @storybook/addon-docs@6.3.12 │ ├─┬ @jest/transform@26.6.2 │ │ └─┬ jest-haste-map@26.6.2 │ │ └── jest-worker@26.6.2 │ └─┬ @storybook/builder-webpack4@6.3.12 │ └─┬ terser-webpack-plugin@4.2.3 │ └── jest-worker@26.6.2 ├─┬ @storybook/angular@6.3.12 │ └─┬ @storybook/core@6.3.12 │ └─┬ @storybook/core-server@6.3.12 │ └─┬ @storybook/manager-webpack4@6.3.12 │ └─┬ terser-webpack-plugin@4.2.3 │ └── jest-worker@26.6.2 ├─┬ jest@26.2.2 │ └─┬ @jest/core@26.6.3 │ ├─┬ @jest/reporters@26.6.2 │ │ └── jest-worker@26.6.2 │ ├─┬ jest-haste-map@26.6.2 │ │ └── jest-worker@26.6.2 deduped │ ├─┬ jest-resolve-dependencies@26.6.3 │ │ └─┬ jest-snapshot@26.6.2 │ │ └─┬ jest-haste-map@26.6.2 │ │ └── jest-worker@26.6.2 │ └─┬ jest-runner@26.6.3 │ └── jest-worker@26.6.2 deduped └─┬ jest-cli@26.2.2 └─┬ jest-config@26.6.3 └─┬ @jest/test-sequencer@26.6.3 ├─┬ jest-haste-map@26.6.2 │ └── jest-worker@26.6.2 └─┬ jest-runner@26.6.3 └── jest-worker@26.6.2
完整错误栈如下:
21:57:38 ERROR in 319.0a46e60283f8bec09734.manager.bundle.js from Terser 21:57:38 Error [ERR_WORKER_INVALID_EXEC_ARGV]: Initiated Worker with invalid NODE_OPTIONS env variable: --max-http-header-size= is not allowed in NODE_OPTIONS 21:57:38 at new Worker (internal/worker.js:164:13) 21:57:38 at ExperimentalWorker.initialize (/bld/workspace/_Pipeline2_NX_Upgrade_forCypress@2/flex/node_modules/jest-worker/build/workers/NodeThreadsWorker.js:149:20) 21:57:38 at new ExperimentalWorker (/bld/workspace/_Pipeline2_NX_Upgrade_forCypress@2/flex/node_modules/jest-worker/build/workers/NodeThreadsWorker.js:145:10) 21:57:38 at WorkerPool.createWorker (/bld/workspace/_Pipeline2_NX_Upgrade_forCypress@2/flex/node_modules/jest-worker/build/WorkerPool.js:44:12) 21:57:38 at new BaseWorkerPool (/bld/workspace/_Pipeline2_NX_Upgrade_forCypress@2/flex/node_modules/jest-worker/build/base/BaseWorkerPool.js:127:27) 21:57:38 at new WorkerPool (/bld/workspace/_Pipeline2_NX_Upgrade_forCypress@2/flex/node_modules/jest-worker/build/WorkerPool.js:30:1) 21:57:38 at new Worker (/bld/workspace/_Pipeline2_NX_Upgrade_forCypress@2/flex/node_modules/jest-worker/build/index.js:167:26) 21:57:38 at getWorker (/bld/workspace/_Pipeline2_NX_Upgrade_forCypress@2/flex/node_modules/terser-webpack-plugin/dist/index.js:288:9) 21:57:38 at /bld/workspace/_Pipeline2_NX_Upgrade_forCypress@2/flex/node_modules/terser-webpack-plugin/dist/index.js:389:41 21:57:38 at /bld/workspace/_Pipeline2_NX_Upgrade_forCypress@2/flex/node_modules/terser-webpack-plugin/node_modules/p-limit/index.js:23:31 21:57:38 at run (/bld/workspace/_Pipeline2_NX_Upgrade_forCypress@2/flex/node_modules/terser-webpack-plugin/node_modules/p-limit/index.js:23:43) 21:57:38 at next (/bld/workspace/_Pipeline2_NX_Upgrade_forCypress@2/flex/node_modules/terser-webpack-plugin/node_modules/p-limit/index.js:16:19) 21:57:38 at run (/bld/workspace/_Pipeline2_NX_Upgrade_forCypress@2/flex/node_modules/terser-webpack-plugin/node_modules/p-limit/index.js:31:3) 21:57:38 at runMicrotasks (<anonymous>) 21:57:38 at processTicksAndRejections (internal/process/task_queues.js:97:5) 21:57:38 at runNextTicks (internal/process/task_queues.js:66:3)
排查及解决思路
- 优先检查测试环境的NODE_OPTIONS环境变量配置:错误直接提示
--max-http-header-size=为空值属于无效参数,直接删除该空配置项或补全合法的参数值即可解决问题,这是最直接的根因。 - 若需要保留现有环境参数配置,可临时关闭terser-webpack-plugin的多线程压缩能力,绕开jest-worker的参数校验逻辑:在webpack配置中找到terser插件配置项,添加
parallel: false即可,该方案不需要修改任何依赖版本,也不会影响现有jest版本的使用。 - 若上述方案不适用,可通过包管理器的依赖覆盖功能统一锁定所有jest-worker版本为26.x:npm可在package.json中添加
overrides字段,yarn可添加resolutions字段,指定所有jest-worker版本为26.6.2,重新安装依赖即可规避高版本jest-worker的校验规则。 - 另外可对比本地和测试环境的依赖锁文件,确认是否存在依赖版本差异,通过统一锁文件保证所有环境依赖版本一致,避免构建时自动拉取更新的依赖版本触发问题。
内容的提问来源于stack exchange,提问作者Anagh Verma
相关产品推荐
相关产品推荐

