执行yarn install遇Node版本不兼容,求助查找glob@11.0.0依赖来源
解决yarn install时glob@11.0.0与Node版本不兼容问题
问题背景
两个月前执行yarn install一切正常,如今执行该命令时出现Node版本与glob@11.0.0不兼容的报错,且未修改过package.json中的依赖配置。
报错信息
verbose 33.786740568 正在向 "https://registry.yarnpkg.com/os-homedir" 发送 "GET" 请求。 verbose 33.822862421 请求 "https://registry.yarnpkg.com/os-homedir" 已完成,状态码 200。 verbose 33.823871025 正在向 "https://registry.yarnpkg.com/gulp-less" 发送 "GET" 请求。 verbose 33.918661822 请求 "https://registry.yarnpkg.com/gulp-less" 已完成,状态码 200。 verbose 33.926033135 正在向 "https://registry.yarnpkg.com/gulp-postcss" 发送 "GET" 请求。 verbose 33.994670505 请求 "https://registry.yarnpkg.com/gulp-postcss" 已完成,状态码 200。 [2/4] 拉取包中... error glob@11.0.0: 模块与当前 "node" 引擎不兼容。预期版本为 "20 || >=22",当前版本为 "16.20.2" verbose 36.305657124 错误:找到不兼容的模块。 at MessageError.ExtendableBuiltin (/usr/local/lib/node_modules/yarn/lib/cli.js:721:66) at new MessageError (/usr/local/lib/node_modules/yarn/lib/cli.js:750:123) at checkOne (/usr/local/lib/node_modules/yarn/lib/cli.js:47866:11) at Object.check (/usr/local/lib/node_modules/yarn/lib/cli.js:47885:5) at /usr/local/lib/node_modules/yarn/lib/cli.js:7351:73 at Generator.next (<anonymous>) at step (/usr/local/lib/node_modules/yarn/lib/cli.js:310:30) at /usr/local/lib/node_modules/yarn/lib/cli.js:321:13 error 找到不兼容的模块。 info 访问 https://yarnpkg.com/en/docs/cli/install 获取该命令的文档说明。
当前package.json配置
{ <some text> "dependencies": { "@rjsf/antd": "^3.2.0", "@rjsf/core": "^3.2.0", "@testing-library/jest-dom": "^5.11.4", "@testing-library/react": "^11.1.0", "@testing-library/user-event": "^12.1.10", "antd": "^4.16.10", "antd-theme-webpack-plugin": "^1.3.9", "axios": "^0.21.1", "babel-plugin-import": "^1.13.3", "eslint-config-airbnb": "^18.2.1", "eslint-plugin-export": "^0.1.2", "jsencrypt": "^3.2.1", "moment": "^2.29.1", "prop-types": "^15.7.2", "react": "^17.0.2", "react-css-theme-switcher": "^0.3.0", "react-dom": "^17.0.2", "react-icons": "4.8.0", "react-iframe": "^1.8.0", "react-page-visibility": "^6.4.0", "react-redux": "^7.2.4", "react-responsive": "^9.0.0-beta.3", "react-router-dom": "^5.2.0", "react-scripts": "4.0.3", "react-timing-hooks": "^2.0.0", "redux": "^4.1.1", "redux-thunk": "^2.3.0", "web-vitals": "^1.0.1" }, "scripts": { <some text> }, "eslintConfig": { "extends": [ "react-app", "react-app/jest" ] }, "browserslist": { <some text> }, "devDependencies": { "autoprefixer": "^9.8.4", "gulp": "^4.0.2", "gulp-csso": "^4.0.1", "gulp-debug": "^4.0.0", "gulp-less": "5.0.0", "gulp-postcss": "^8.0.0", "less-plugin-npm-import": "^2.1.0" } }
已尝试但无效的方案
- 将Node版本切换至20,出现大量依赖弃用提示
- 重新生成
yarn.lock,仍触发版本不兼容报错 - 使用
--ignore-engines参数执行,后续出现Babel版本不兼容报错:
./src/index.js 错误:[BABEL] /app/src/index.js: 需要 Babel "^7.16.0",但当前加载的版本是 "7.12.3"。如果你确认已安装兼容版本的 @babel/core,那很可能是构建过程中某个环节加载了错误的版本。检查该错误的堆栈跟踪,找到第一个未提及 "@babel/core" 或 "babel-core" 的条目,查看是哪个程序调用了 Babel。(处理 "/app/node_modules/babel-preset-react-app/index.js$0$2" 时)
解决方案
第一步:定位依赖glob@11.0.0的组件
执行以下命令查看glob@11.0.0的依赖树,明确是哪个顶层包间接引入了它:
yarn why glob@11.0.0
命令会输出完整的依赖链路,帮你找到根源包。
第二步:锁定兼容的glob版本
在package.json中添加resolutions字段,强制指定glob使用兼容Node 16的版本(比如glob@10.x系列,该版本支持Node >=16):
{ // ... 其他原有配置 "resolutions": { "glob": "^10.3.10" } }
第三步:重新安装依赖
执行以下命令让yarn应用版本锁定规则,完成依赖安装:
yarn install
此方案既解决了glob版本与Node 16的兼容性问题,又避免了升级Node带来的依赖弃用风险,同时不会触发后续的Babel版本冲突。
内容的提问来源于stack exchange,提问作者Mak S
相关产品推荐
相关产品推荐

