项目启功需要添加SKIP_PREFLIGHT_CHECK=true该怎么办?

遇到问题不要慌:查资料→破难题→记妙招,今日份成长已签收! 👍 👍👍对对对!

分析这个问题的原因是依赖冲突导致的,然而为什么会有依赖冲突?Node.js 采用嵌套式依赖结构,当不同层级的包对同一依赖要求不同版本时,就会触发冲突。例如:

  • A 包依赖 lodash@^4.0.0
  • B 包依赖 lodash@^5.0.0
    此时 npm 需要裁决最终安装哪个版本,若无法调和则报错退出。

当执行 npm install 遇到依赖冲突时,可以使用 --force--legacy-peer-deps 参数来解决问题。

  • --force‌:这个参数会强制 npm 获取远程资源,即使磁盘上存在本地副本也是如此。它可能会忽略一些依赖冲突,但可能会导致不稳定的依赖关系,因此应谨慎使用。

  • ‌--legacy-peer-deps‌:这个参数是在 npm v7 中引入的,用于在安装时忽略所有 peerDependencies,采用 npm 版本 4 到版本 6 的样式。在很多情况下,npm v7 默认安装 peerDependencies 会导致版本冲突,从而中断安装过程。使用 --legacy-peer-deps 可以绕过这些冲突,继续安装。

之前项目都能正常使用,不知道做了什么,然后再执行npm install 的时候就会出现这种提示,很是烦人,不添加 --force 还安装不成功。
如果添加了`--force` 在启动的时候又会出现如下问题,虽然添加了`SKIP_PREFLIGHT_CHECK=true` 可以解决问题,也很麻烦。

javascript 复制代码
If you would prefer to ignore this check, add SKIP_PREFLIGHT_CHECK=true to an .env file in your project.
That will permanently disable this message but you might encounter other issues.

To fix the dependency tree, try following the steps below in the exact order:

  1. Delete package-lock.json (not package.json!) and/or yarn.lock in your project folder.
  2. Delete node_modules in your project folder.
  3. Remove "webpack" from dependencies and/or devDependencies in the package.json file in your project folder.
  4. Run npm install or yarn, depending on the package manager you use.

接下来要分析原因。根据报错信息,Create React App工具链会进行预检(preflight check),确保依赖树中的特定包版本符合要求。例如,react-scripts可能需要某个确切版本的webpack,如果项目中存在更高或更低的版本,就会触发这个错误。这时候有两种选择:要么修复依赖关系,要么用SKIP_PREFLIGHT_CHECK=true来跳过检查。

⚠️ 警告:以上方法均属权宜之计,可能导致运行时不可预料的错误!建议仅用于紧急恢复开发环境。

使用npm ls webpack命令查看webpack版本,果然发现了异类,这个时候就要分析这个依赖了,如果能修复尽量修复,我是经过反复查找,发现项目中没有使用,然后就删除了,接下来删除lock文件或node_modules重新安装依赖,问题完美解决。

如果实在解决不了,还是老老实实的在 .env 文件中添加SKIP_PREFLIGHT_CHECK=true吧。此操作将永久禁用 Create React App 的依赖树前置检查机制。

相关推荐
前端达人10 小时前
「React实战面试题」:React.memo为什么失效了?
前端·javascript·react.js·前端框架·ecmascript
江城开朗的豌豆10 小时前
嘿,别想那么复杂!我的第一个微信小程序长这样
前端·javascript·微信小程序
Irene199110 小时前
URLSearchParams :处理 URL 查询参数的接口
开发语言·前端·javascript
Dontla10 小时前
Web典型路由结构之Next.js (App Router, v13+) )(文件系统驱动的路由:File-based Routing)声明式路由:文件即路由
开发语言·前端·javascript
我不是程序媛lisa10 小时前
前端正确处理“文字溢出”的思路与最佳实践
前端·css3
BigTopOne10 小时前
【Fragment】parentFragmentManager , childFragmentManager 区别是什么? 分别在什么场景使用?
前端
岁月宁静10 小时前
Vue3.5 + SSE 构建高可用 AI 聊天交互层 ——chat.js 模块架构与实现
前端·vue.js·人工智能
~无忧花开~10 小时前
JavaScript学习笔记(十七):ES6生成器函数详解
开发语言·前端·javascript·笔记·学习·es6·js
前端 贾公子10 小时前
Vue3 defineModel === 实现原理
前端·javascript·vue.js
东华帝君10 小时前
五种继承的方式
前端