我有一个与Lerna管理的打字单。测试是用Jest完成的。
有几十个包定义了测试脚本,而jest配置被存储在一个中心位置并被所有人使用。
一个示例测试脚本看起来像这样:
jest --config ../../../tests/jest.config.json --setupFiles ../../../tests/jest-setup.js --rootDir .
每个包装有不同数量的"../"取决于它在源文件夹树中的位置。
在Windows, Linux和Mac等多个平台上100%工作。
由于某些原因,当我们在docker容器中运行它时,如果并发性没有设置为1,我们会看到一个包中的jest进程实际上获得了另一个包的参数,这导致它失败:
@cmd/example-package: > @cmd/example-package@0.0.0 test:integration
@cmd/example-package: > jest --config ../../tests/jest.config.json --setupFiles ../../tests/jest-setup.js --setupFilesAfterEnv ../../tests/setEnvVars.js --rootDir . --testPathPattern=./integration-tests --runInBand
@cmd/example-package: jest parameters: /src/cmd/example-package , --config,../../../tests/jest.config.json,--setupFiles,../../../tests/jest-setup.js,--setupFilesAfterEnv,../../../tests/setEnvVars.js,--rootDir,.,--testPathPattern=./integration-tests,--runInBand
最后一行是从jest脚本开头添加的代码中打印出来的,它打印当前文件夹和传递的参数。可以看到,lerna报告传递给jest的参数并不是实际使用的参数。
我们在构建过程中也看到了这样的错误。
如果你有什么办法,我将不胜感激。
- 尝试了多个nodejs基础图像(alpine, node, Bullseye),多个节点版本和多个lerna版本。
- 甚至尝试从Lerna切换到Turborepo,但仍然得到这些并发错误
在我们的示例中,问题与在容器的一个基本映像中的alpine节点docker映像上安装不同版本的npm有关。
把问题留在这里,也许对别人有帮助。