大家好,我是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
