大家好,我卡颂。

前端范畴从不短少抢手,根本每过半年,就会呈现新的东西。

在这样快节奏的浪潮中,有个东西却显得方枘圆凿,他便是Rome

从名字中咱们就能窥探出一丝端倪,看看别的东西:

  • vite(法语中快的的意思)

  • turbopack英语涡轮增压器的意思),

再看看他 —— 涵义是罗马不是一天建成的

实际也如此,Rome团队用时一年半总算上线了第一个安稳版别Rome v10。

作为前端东西链东西,Rome和那些咱们耳熟能详的东西(比方viteeslintCRA)有啥区别?未来他会一统前端么?

今日咱们来聊聊这个论题。

欢迎参与人类高质量前端结构研讨群,带飞

Rome是什么

Rome的创造者是前Babel团队的Sebastian McKenzie,后文就叫他小马吧。

耗时一年半才出第一版,这个东西会一统前端么?

21年5月,小马拿了2家风投450w刀的出资后成立了Rome Tools公司。

这家公司的政策是:完结一站式前端工程化处理方案,以代替现有的各种前端东西。

在小马看来,当时的前端工程化处理方案存在许多问题,比方:

问题1:东西太多,学习本钱高

关于项目中常用的一些东西,比方:

  • 代码格式化东西:Prettierdprint

  • lint东西:ESLintStyleLint

  • 查验东西:Vitestjest

  • 编译器:babelSWC

  • 打包东西:webpackviterollup

要熟练运用他们并不简略,因为:

  • 需求了解不同东西怎样装备

  • 需求考虑怎样将这些东西整合到项目中

终究,项目中往往充满着林林总总的装备文件。以至于杂乱的项目中通常有个特别的职位 —— webpack装备工程师

耗时一年半才出第一版,这个东西会一统前端么?

许多脚手架东西(比方create-react-app)便是为了处理这个问题而生,但他们的缺陷也很显着。

他们只是供应了胶水层隔离了这些东西的杂乱度,但假定有个性化需求时开发者仍是得直面这些问题。

而关于Rome驱动的项目,只会有一个rome.json装备文件以及开箱即用的最佳实践。

问题2:功用浪费

前端东西链的许多东西都有拜访AST的需求,但许多时分他们是各自为战的。

比方,babel处理代码降级时会生成ASTeslint查看代码时也会生成AST,这就造成了功用浪费。

另一方面,前端东西用Rust重写已然成为趋势。

假定能将这些东西都用Rust完结,并尽或许减少不必要的解析过程,就能显着进步东西功用。

Rome的根本思路便是如此。根据小马的核算,Rome格式化代码的速度是Prettier的100倍以上:

耗时一年半才出第一版,这个东西会一统前端么?

问题3:提示对开发者不友善

当时许多前端东西是不同团队、不同个人开发的,所以在提示信息的准确性、领会上各不相同。

Rome提示信息上下了许多功夫,比方关于如下代码:

function test(callback) {
  try {
    return callback();
  } catch (e) {
    console.log(e);
    throw e;
  }
  return 20;
}

保存为a.js,实施如下查看指令:

npx rome check a.js

控制台会输出三段内容。

第一段,告知你return 20永久不会实施:

耗时一年半才出第一版,这个东西会一统前端么?

后两段会告知你为什么不会实施:

  • 要不是因为return callback();

耗时一年半才出第一版,这个东西会一统前端么?

  • 要不是因为throw e;

耗时一年半才出第一版,这个东西会一统前端么?

比较eslint的提示信息,Rome的提示信息的确更友善。

未来,这样友善的提示信息会呈现在Rome东西链的每一环,比方:

  • 打包代码的信息

  • lint信息

  • 查验信息

Rome会一统前端么?

当时,Rome只供应了linter(对标eslint)、formatter(对标prettier)两个东西,能够经过如下指令领会:

# 格式化
npx rome format <文件途径>
# lint
npx rome check <文件途径>

更详尽的指令参看官方文档

假定未来Rome完结了他的政策,一定是对前端开发者很有吸引力的挑选。

可是,要完结这种大而全的处理方案并非一朝一夕就能完结的。

而在前端范畴,新的技能、新的结构总是源源不断的呈现。

同为公司级的开源产品,vercel开发的next.js尽管挑选了与Rome不同的方向(以前端结构为切入点),但两者的功用点一定有重合的一天。

从发展途径看,关于next.js

  • 当时:next.js依托webpack打包

  • 下一步:vercel投入到turbopacknext.js依托turbopack打包

  • 下一步:turbopack为了将本身速度优势发挥到极致,或许会用Rust重写其他东西链东西

关于Rome

  • 当时:主打linterformatter

  • 下一步:开发其他东西链东西

当两个产品有了功用相同的东西时,即便Rome开发领会更好(假定),但早已深度耦合在Next.js技能栈的开发者要想切换底层东西链东西是不或许的。

不仅是vercelVue团队、Remix团队等都是Rome的潜在竞赛者。

上面说的是未来Rome的老到体与其他竞品的竞赛。而在当时,作为linterformatterRome的推行也是阻力重重。

相较于eslintprettier这样带着纯粹开源血统的开源项目,Rome巨大的愿景使得那些大用户体量的东西底子不会考虑接入Rome

类似行为就像 —— 为什么Next.js不原生支持Vite?当然,别人会说这都是技能上的考虑,与生意无关。

耗时一年半才出第一版,这个东西会一统前端么?

总结

Rome的开发进度诚如他的名字相同 —— 罗马不是一天建成的。

在前端范畴迅猛发展,并隐隐有独占之势的今日,要完结Rome巨大的愿景并取得满足的市场份额并不简略。

你觉得Rome的远景怎样呢?