当前位置: 首页 > 科技观察

第一版的出版用了一年半的时间,这个工具会统治前端吗?

时间:2023-03-22 17:26:28 科技观察

大家好,我是Kason。前端领域从不缺少热点,新工具基本上每六个月就会出现一次。在如此快节奏的浪潮中,有一个工具显得格格不入,他就是罗马。我们可以从名字中窥见一斑,看看其他工具:vite(法语中“快速”的意思)。turbopack(在英语中意为“涡轮增压器”)。再看看他——意思是“罗马不是一天建成的”。事实也是如此,时隔一年半,Rome团队终于推出了第一个稳定版Romev10[1]。作为前端工具链工具,Rome和那些大家耳熟能详的工具(如vite、eslint、CRA)有什么区别?未来他会称霸前端吗?今天就来聊聊这个话题。什么是罗马?罗马的创造者是前巴别塔队的“SebastianMcKenzie”。以后就叫他小马吧。5月21日,小马从两位风险投资人那里获得了450万的投资,成立了RomeTools[2]。公司的目标是实现一站式前端工程解决方案,以替代现有的各种前端工具。在小马看来,目前前端工程化的解决方案存在很多问题,比如:问题一:工具太多,学习成本高对于项目中常用的一些工具,比如:代码格式化工具:Prettier、dprint.Lint工具:ESLint、StyleLint。测试工具:Vitest、jest。编译器:babel、SWC。打包工具:webpack、vite、rollup。熟练使用它们并不容易,因为:您需要了解不同工具的配置方式。需要考虑如何将这些工具集成到项目中。到头来,项目中往往塞满了各种配置文件。以至于在复杂的项目中通常会有一个特殊的职位——“webpack配置工程师”。各种配置文件许多脚手架工具(比如create-react-app)就是为了解决这个问题而诞生的,但是它们的缺陷也很明显。它们只是提供了一个粘合层来隔离这些工具的复杂性,但是如果有个性化的需求,开发者还是要面对这些问题。而对于Rome支持的项目,将只有一个rome.json配置文件,其中包含开箱即用的最佳实践。问题二:性能浪费前端工具链中很多工具都需要访问AST,但很多时候都是自己打架。比如babel在处理代码降级时会生成AST,eslint在review代码时也会生成AST,造成性能浪费。另一方面,用Rust重写前端工具已经成为一种趋势。如果这些工具可以用Rust实现,并尽可能减少不必要的解析过程,则可以显着提高工具性能。这是罗马的基本思想。根据小马的计算,Rome格式化代码的速度是Prettier的100多倍:benchmark问题3:提示对开发者不友好目前很多前端工具都是由不同的团队和个人开发的,所以提示的准确性信息,经验各不相同。罗马在“提示信息”上下了不少功夫,比如下面的代码:functiontest(callback){try{returncallback();}catch(e){console.log(e);扔e;}return20;}保存为a.js,执行如下检查命令:npxromechecka.js控制台会输出三段内容。第一段告诉你return20永远不会执行:最后两段告诉你为什么不执行:如果不是因为returncallback():如果不是因为throwe。相比于eslint的提示信息,Rome的提示信息确实更加友好。以后这样友好的提示信息会出现在Rome工具链的每一个环节,比如:打包后的代码信息、lint信息、测试信息、Rome会不会统一前端?目前Rome只提供了两个工具:linter(用于基准测试的eslint)和formatter(用于基准测试的prettier),可以通过以下命令体验:#formatnpxromeformat#lintnpxromecheck更详细命令参考官方文档[3]如果Rome将来能达到他的目的,那对前端开发者来说一定是一个有吸引力的选择。然而,实现如此庞大而全面的解决方案并非一蹴而就。在前端领域,新技术、新框架不断涌现。作为公司级开源产品,vercel开发的next.js选择了与Rome不同的方向(以前端框架为切入点),但两者的功能总有一天会重合。从发展路径来看,对于next.js:目前:next.js依赖webpack打包。下一步:将vercel放入turbopack,next.js依赖turbopack进行打包。下一步:为了最大化其速度优势,turbopack可能会用Rust重写其他工具链工具。对于Rome:目前:主要是linter、formatter。下一步:开发其他工具链工具。当两个产品有相同功能的工具时,即使Rome的开发体验更好(假设),已经在Next.js技术栈深度耦合的开发者也不可能切换底层工具链工具。不仅是vercel,Vue团队、Remix团队等都是Rome的潜在竞争对手。上面说的就是罗马成熟体与未来其他竞品的竞争。目前,作为linter和formatter,Rome的推广也充满了阻力。相比于eslint,prettier这类纯开源血统的开源项目,Rome的宏伟愿景让那些用户量大的工具根本不用考虑接入Rome。类似的行为就像——为什么Next.js不原生支持Vite?当然,也有人会说,这些都是技术上的考虑,与业务无关。总结罗马的发展进程正如他的名字一样——非一日之寒。在前端领域发展迅猛、垄断潜力巨大的今天,实现罗马的宏伟愿景并获得足够的市场份额并非易事。您如何看待罗马的未来?参考文献[1]Romev10:https://rome.tools/blog/2022/11/08/rome-10.html。[2]罗马工具公司:https://rome.tools/blog/announcing-rome-tools-inc/。[3]官方文档:https://docs.rome.tools/guides/getting-started/。