React为什么不将Vite作为构建应用的首选

react为什么不将vite作为构建应用的首选?下面本篇文章就来带大家聊聊react不将vite作为默认推荐的原因,希望对大家有所帮助!

React为什么不将Vite作为构建应用的首选

React文档中,对于构建新的React应用,首推的方式是CRA(create-react-app)。

CRA推出于2016年,彼时还没有成体系的React脚手架工具供大家使用,再加上这是官方工具,一经推出就受到了欢迎。截止当前,CRA仓库已经收获快10wstar

但是,随着时间的推移,出现了很多优秀的替代品,比如parcelvite提供的React模版。

CRA本身的进步速度却在放缓,其上一次提交要追溯到去年9月8日:

React为什么不将Vite作为构建应用的首选

此外,CRA对一些流行工具的支持也不是很好,比如在TailwindCSS文档中就不推荐使用CRA

React为什么不将Vite作为构建应用的首选

近日,油管10w粉丝的前端网红Theo就在React文档仓库发起了一个PR,号召React文档不要再默认推荐CRA,而是应该将Vite作为构建应用的首选。【相关推荐:Redis视频教程、编程视频】

React为什么不将Vite作为构建应用的首选

看这围观群众的数量就知道大家对这种敏感问题有多关心了:

React为什么不将Vite作为构建应用的首选

那么,React团队是如何看待这个问题的呢?他们会将Vite作为构建应用的首选项么?

本文来聊聊DanReact核心成员)对这一问题的看法。

欢迎加入人类高质量前端交流群,带飞

CRA的定位

既然众矢之的是CRA,那么首先我们需要明白CRAReact体系下的定位,再来看看Vite能否在这个定位下取代前者。

CRA诞生的时期(2016年),是SPA(单页应用)最火热的时期。在当时,他很好的解决了两个痛点:

0配置初始化项目

这点不用过多介绍,执行如下命令后就能生成一个CSR(客户端渲染)的React项目:

npx create-react-app 项目名复制代码

集成工具链

CRA将当时的一些工程化最佳实践都封装在react-scripts包下,并抹平这些工具不兼容的地方。

开发者既享受了开箱即用的最佳实践,又不用担心某些工具升级后对项目造成的影响(CRA会处理)。

后来的很多优秀脚手架工具(比如ViteParcel),也都沿用了这种开箱即用的理念。

除了以上两点,随着CRA的走红,React团队还将他作为新特性的快速分发渠道,比如:

Fast Refresh(针对React的热更新,不会丢失组件状态)

Hooks推出后的一系列lint规则

依托CRA庞大的装机量与使用量,这些集成到CRA的特性可以快速部署到开发者的项目中,达到快速提高普及率的目的。

试想,如果没有CRA的推动,Hookslint规则很难在开发者中有这么高普及率,Hooks的理念也就不会这么快席卷整个前端框架领域。

从以上三点来看,Vite完全可以成为比CRA性能更优的替代品。

但是,React团队的考量不仅如此。

脚手架工具的不足

虽然CRA开箱即用,但他提供的能力并不全面,比如他并不提供:

状态管理方案

路由方案

数据请求方案

AppMall应用商店 AppMall应用商店

AI应用商店,提供即时交付、按需付费的人工智能应用服务

AppMall应用商店 56 查看详情 AppMall应用商店

为什么不提供呢?因为在CRA发展的时期,这些方案还未形成最佳实践。

随着时间发展,开发者逐渐摸索出解决这些问题的最佳实践。比如请求瀑布问题,考虑如下组件:

function App() {  const [data, update] = useState(null);  useEffect(() => {    fetch('http://...').then(res => update(res.json()))  }, [])    return }复制代码

只有当App组件渲染后才能开始请求数据,这个请求时机是比较滞后的,如果Child依赖data来请求自己的数据,那么由于App请求的滞后导致Child的请求也滞后了,这就是请求瀑布问题。

这个问题常见的解决方法是 —— 将请求数据的逻辑收敛到路由方案中。

再比如,随着业务不断迭代,业务代码体积越来越大,常见的优化手段是懒加载组件。

但是,手动执行懒加载常常会产生意料之外的问题。比如,页面中有个图表组件,如果开发者懒加载了这个组件,但是该组件在on mount时请求数据,这又会陷入请求瀑布问题。

要彻底解决这个问题,需要配合3类技术方案:

数据请求方案(解决数据流向问题)

路由方案(解决数据请求时机问题)

打包方案(解决懒加载的实现问题)

类似的问题还有很多,比如CSR首屏渲染速度慢的问题(需要通过SSR解决)。

可见,CRA仅仅提供了CSR环境下一个开箱即用的模版,但是随着项目变得越来越复杂,一些业务细节问题CRA是没有提供开箱即用的解决方案的。

从这个角度看,即使切换到Vite还是会面临同样的问题。

新时代的框架

随着各种常见问题的最佳实践被探索出来,逐渐诞生了一些以React为基础,集成各种业务问题最佳实践的框架,比如Next.jsRemix

其中,Remix就是以React-Router(路由解决方案)为基础,逐渐发展出来的囊括路由、数据请求、渲染为一体的全栈框架。

那么,能否将CRA迭代为类似Next.jsRemix这样的全栈框架,一劳永逸解决CRA对各种最佳实践的缺失呢?

React团队认为,这样做需要极高的开发成本,而且随着时代发展,总会出现更多CRA不支持的最佳实践(就像他当前面临的问题一样),那么CRA终有一天会被再度淘汰。

所以,这个方案不可取。

既然这个方案不可取,那么用Vite取代CRA的方案也不可取。因为单纯使用Vite并没有解决最佳实践的缺失,必须在此基础上实现那些最佳实践(比如路由、数据请求…),那又回到了开发一个全栈框架

最终,React团队更倾向如下解决方案:将CRA作为一个脚手架工具,启动后会根据用户的不同场景需要(比如是SSR还是CSR)推荐不同的框架,再将CRA作为不使用框架情况下的兜底方案

并且,在实现上,可能将兜底方案中的webpack切换为Vite

总结

React团队的思考可以发现,React始终将自己定位为一个状态驱动UI的库。

随着时代的发展,单独使用这个库已经不能满足日常开发需要,基于底层使用React + 实现各种最佳实践模式的框架会越来越流行。

最近,Next.js达到了10wstar成就,成为Githubstar排名第14的仓库,间接印证了这种趋势。

回到开篇的问题:React为什么不将Vite作为默认推荐?

如果是用Vite取代webpack作为CRA的打包工具,未来可能会。但是,这不是最首要的问题。

React为什么不将Vite作为构建应用的首选

如何协助上层的框架更好的服务开发者,才是React团队首要考虑的问题。

React不死,他只会逐渐移居幕后。

【推荐学习:javascript视频教程】

以上就是React为什么不将Vite作为构建应用的首选的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/543910.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
崩坏星穹铁道阿格莱雅突破材料有哪些 阿格莱雅突破材料大全
上一篇 2025年11月9日 16:31:24
composer diagnose命令能检查什么问题_使用composer diagnose命令进行环境自检与故障排查
下一篇 2025年11月9日 16:31:27

相关推荐

  • 修复Django电商项目中AJAX过滤产品列表图片不显示问题

    在Django电商项目中,当使用AJAX动态加载过滤后的产品列表时,常遇到图片无法正常显示的问题。这通常是由于前端模板中图片加载方式(如data-setbg属性结合JavaScript库)与AJAX动态内容更新机制不兼容所致。解决方案是直接在AJAX返回的HTML中使用标准的标签来渲染图片,确保浏览…

    2026年5月10日
    000
  • 前端缓存策略与JavaScript存储管理

    根据数据特性选择合适的存储方式并制定清晰的读写与清理逻辑,能显著提升前端性能;合理运用Cookie、localStorage、sessionStorage、IndexedDB及Cache API,结合缓存策略与定期清理机制,可在保证用户体验的同时避免安全与性能隐患。 前端缓存和JavaScript存…

    2026年5月10日
    200
  • JavaScript 高效判断页面所有复选框状态的技巧与实践

    本文旨在提供一套高效且专业的javascript方法,用于判断网页中所有复选框的选中状态。我们将探讨如何利用`array.some()`快速确定是否有未选中的复选框(进而判断是否全部选中),以及如何使用`array.filter()`统计选中和未选中的复选框数量。通过优化dom元素选择和数组操作,提…

    2026年5月10日
    100
  • 从 JavaScript 获取 URL 并在 PHP DataGrid 中使用

    本文档旨在指导开发者如何从 JavaScript 函数中获取 URL,并将其动态应用于 PHP DataGrid。通过前端 JavaScript 动态生成 API 地址,并将其传递给后端的 PHP DataGrid,实现数据根据用户会话动态加载。 动态配置 DataGrid 的 URL 在构建动态 …

    2026年5月10日
    100
  • 控制HTML Canvas颜色空间输出24位深度TIFF图像

    本教程详细介绍了如何在web前端环境中,特别是结合`html2canvas`和`canvas-to-tiff`库时,通过明确设置html canvas的颜色空间为`srgb`,从而确保输出24位深度的tiff图像。文章将提供具体的javascript代码示例,并解释其原理,帮助开发者解决canvas…

    2026年5月10日
    200
  • HTML中如何实现MathML

    答案是利用HTML5原生支持MathML,只需将MathML代码嵌入标签即可,现代浏览器能直接渲染,无需插件;通过CSS可美化公式样式,如字体、颜色、间距等,提升显示效果;对于老旧浏览器,推荐使用MathJax作为兼容方案,支持LaTeX输入并渲染为高质量公式,兼顾可访问性与跨浏览器兼容性。 在HT…

    2026年5月10日
    000
  • JavaScript Electron桌面应用

    答案:使用JavaScript开发%ignore_a_1%桌面应用需结合Web技术与Node.js,通过主进程管理窗口、渲染进程展示界面,并利用IPC通信,调用系统功能如文件对话框,最后用electron-builder打包发布,注意安全与进程职责分离。 用JavaScript开发Electron桌…

    2026年5月10日
    000
  • 如何通过浏览器扩展实现快速HTML代码编辑的处理方法

    答案:通过浏览器扩展可实现快速HTML编辑,提升开发效率。首先选择如EditThisPage、Live HTML Editor、Web Developer或Scratchpad for Chrome等工具,安装后启用扩展的页面内编辑功能,直接修改DOM并实时预览;修改仅限当前会话,刷新即失效,适合临…

    2026年5月10日
    000
  • PHP代码注入检测日志分析_PHP代码注入日志检测方法详解

    答案:日志分析是发现PHP代码注入的关键手段,主要通过Web服务器访问日志、PHP错误日志、PHP-FPM日志及应用自定义日志等多源数据,结合grep、ELK、WAF等工具识别含eval()、system()、Base64编码、目录遍历等特征的异常请求,并建立基线、设置检测规则与自动化告警,配合事件…

    2026年5月10日
    000
  • JavaScript中为动态列表元素创建唯一悬停描述的教程

    本教程旨在解决如何为动态生成的列表或数组元素分配唯一悬停描述(tooltip)的问题。文章将深入探讨使用javascript对象和map数据结构来高效地管理名称与描述的映射关系,并提供具体的代码示例,以实现每个列表项在鼠标悬停时显示不同的自定义信息,同时兼顾性能与数据顺序的需求。 在网页开发中,我们…

    2026年5月10日
    000
  • Go语言与Microsoft SharePoint集成指南

    Go语言可以有效集成Microsoft SharePoint,主要通过两种途径:一是利用SharePoint提供的RESTful API进行数据交互,Go的标准HTTP客户端库即可轻松实现;二是通过SharePoint应用模型开发自托管应用,这种模型支持使用包括Go在内的任何语言编写后端逻辑。 1.…

    2026年5月10日
    000
  • javascript生命周期钩子是什么_组件有哪些关键阶段?

    JavaScript原生无生命周期钩子,这是Vue、React等框架为组件设计的机制;Vue按创建、挂载、更新、卸载四阶段提供对应钩子,React类组件有明确生命周期方法,函数组件则通过useEffect模拟,其核心价值在于精准控制执行时机以避免DOM操作错误和内存泄漏。 JavaScript 本身…

    2026年5月10日
    100
  • 如何安全有效地从外部网页获取HTML元素数据并应用于自身页面

    本教程旨在解决如何在不同域名下,通过javascript获取并使用另一个网页的html元素数据。文章将深入探讨同源策略的限制,并提供两种主要解决方案:使用` 在现代Web开发中,有时我们需要从外部网站获取特定的HTML内容或属性值,并将其整合到我们自己的网页中。例如,从XYZ.COM/B.html页…

    2026年5月10日
    100
  • 怎么安装html5_HTML5开发环境安装与配置详细步骤

    答案是配置HTML5开发环境需三步:1. 安装VS Code等编辑器并配置插件;2. 使用Chrome或Firefox测试页面;3. 可选搭建本地服务器,如Live Server或http-server;最后创建index.html文件验证环境。 安装HTML5开发环境其实并不复杂,因为HTML5本…

    2026年5月10日
    000
  • JavaScript动态下拉菜单:实现日期选项与价格计算关联

    在现代web应用中,动态生成表单元素并使其具备交互逻辑是常见的需求。特别是在需要根据用户选择调整价格或服务参数的场景下,下拉菜单()常被用来展示一系列选项。本教程将指导您如何利用javascript动态生成一个包含日期选项的下拉菜单,并为每个选项关联一个具体的数值(如剩余天数),进而实现一个基于用户…

    2026年5月10日
    000
  • 从视频链接中提取视频时长的前端实现教程

    从视频链接中提取视频时长的前端实现教程从视频链接中提取视频时长的前端实现教程从视频链接中提取视频时长的前端实现教程从视频链接中提取视频时长的前端实现教程

    本文详细介绍了如何在%ignore_a_1%通过javascript从html “ 元素中提取视频时长。核心方法是利用视频元素的 `loadeddata` 事件,确保视频元数据加载完成后,再访问其 `duration` 属性。教程将提供完整的html和javascript代码示例,并讨论相关注意事…

    2026年5月10日 用户投稿
    100
  • 使用SMTP.js发送邮件:客户端集成、常见问题与最佳实践指南

    本文深入探讨了使用SMTP.js库在前端发送邮件时可能遇到的问题,特别是与Elastic Email集成时的挑战。我们将分析代码中常见的异步处理错误、条件函数定义陷阱,并提供修正后的代码示例和最佳实践。重点强调了正确处理Promise链、确保函数可访问性以及客户端邮件发送的安全考量,帮助开发者构建更…

    2026年5月10日
    000
  • 前端性能监控如何量化JavaScript的加载时间?

    通过Performance API可精确量化JavaScript加载时间,首先调用performance.getEntriesByType(‘resource’)获取资源加载记录,筛选出mimeType为application/javascript或URL含.js的条目,提取…

    2026年5月10日
    000
  • 使用CSS Grid实现不规则列布局:告别传统表格的限制

    本教程详细阐述如何利用css grid实现复杂的、不规则的列布局,尤其适用于那些传统html表格难以实现的块状结构。文章将通过具体的css属性和html结构示例,指导读者如何定义网格、控制子项的跨度与位置,以及优化自动布局流程,从而高效构建灵活且响应式的页面布局。 1. 传统表格的局限与CSS Gr…

    2026年5月10日
    000
  • 如何在仅表单ID唯一时精确选择表单内部元素进行CSS样式定制

    当网页中存在多个结构相似的表单,且其内部元素(如输入框、按钮)的类名或标签名不唯一时,通过css为特定表单进行独立样式定制会面临挑战。本文将详细介绍如何利用表单的唯一id作为父选择器,结合后代选择器,精确地定位并样式化目标表单内的任意元素,从而避免样式冲突,实现精细化控制。 精准定位表单元素的CSS…

    2026年5月10日
    000

发表回复

登录后才能评论
关注微信