执行Jest测试套件遇Babel版本冲突问题(仅npm install后触发)
我帮你拆解下这个问题:你每次跑Jest测试都碰到Requires Babel "^7.0.0-0", but was loaded with "6.26.3"的错误,而且只有npm install之后才会出现,不想用yarn的话,咱们从依赖版本匹配的角度来解决。
先看你的依赖配置,核心问题出在Jest和babel-jest的版本与Babel 7不兼容:
你当前用的babel-jest@23.6.0和jest@23.6.0是针对Babel 6开发的版本,而你的项目已经升级到了Babel 7的@babel/core@7.3.4,两者版本不匹配导致了冲突。虽然你装了babel-core@7.0.0-bridge.0这个桥接包(用来让旧工具兼容Babel 7),但npm的依赖解析逻辑在npm install时,还是会因为babel-jest@23.x的依赖关系,拉取Babel 6的babel-core@6.26.3,这就出现了错误提示里的“加载了错误版本”的情况。
给你几个具体的解决步骤:
升级Jest相关依赖到兼容Babel 7的版本
Jest从24.x版本开始全面支持Babel 7,所以你需要把babel-jest、jest以及相关的 resolver 依赖都升级到24.x及以上的稳定版。修改package.json里的对应依赖:"babel-jest": "^24.9.0", "jest": "^24.9.0", "jest-resolve": "^24.9.0", "jest-pnp-resolver": "^1.2.1"清理npm缓存并重新安装依赖
之前的安装可能残留了旧版本的依赖文件,执行以下命令彻底清理后重新安装:npm cache clean --force rm -rf node_modules rm package-lock.json npm install(可选)明确Jest的Babel转换配置
如果升级后还是有问题,可以在Jest配置里明确指定使用babel-jest处理JS/JSX文件,比如在项目根目录创建jest.config.js:module.exports = { transform: { '^.+\\.jsx?$': 'babel-jest', }, };或者直接在package.json的
jest字段里添加这个配置。
至于为什么只有npm install后才出现这个问题:因为每次执行npm install,npm都会重新解析整个依赖树,拉取babel-jest@23.x所依赖的Babel 6版本的babel-core,而之前可能缓存里没有这个旧版本,或者你手动清理过相关文件,所以只有install后才会触发版本冲突。
内容的提问来源于stack exchange,提问作者Tatevik

