- 原文地址:Introduction to Rome — An All-in-One JavaScript Dev Toolchain
- 原文作者:Nathan Sebhastian
- 译文出自:掘金翻译计划
一个满足你完整网络开发需求的开发环境

使用像 React, Vue, 或者 Angular 这样的前端库来搭建一个现代 JavaScript 项目,你需要配置许多的开发工具,以便运行你的 JavaScript 代码。
你或许已经知道,在 JavaScript 生态中,有大量独立的开发工具可用于各种用途:
-
Webpack 代码打包工具
-
Babel 代码编译工具
-
Jest 代码测试工具
-
NPM or Yarn 包安装、管理工具
-
Prettier 代码格式化工具
-
ESLint 语法规则和代码风格的检查工具
市面上还有更多的工具,如用于 CSS 代码转换的 PostCSS 和用于强制类型检查的 TypeScript。
一个 JavaScript 项目中可添加的工具多得令人精疲力竭,而这也是 Rome 诞生的初衷。
Rome 是一个 JavaScript 工具链,旨在成为涉及 JavaScript 项目开发中方方面面的一体化工具。Rome 的作者是 Sebastian McKenzie,他同时也是 Babel 和 Yarn 的作者。
这一工具仍处于测试阶段,目前只有代码检测功能(linting feature)可以使用。但项目正在积极开发中,计划支持打包、编译、测试、类型检查等功能。
有趣的是,在很大程度上 Rome 是从零开始编写的,没有任何依赖性。其他工具比如 Create React App 需要为你的项目安装和配置 Webpack(及其他),而 Rome 实际上根本用不上它们。这一点是好是坏——由你来决定。
Rome 推出的的时间点也很有意思,它进入了一个与一年前截然不同的生态系统。
随着 Bit 最新版本的发布,对简化和规范网络开发的工具链的需求已经通过新的 ‘Envs’ 功能得到满足。
Component Development Environments | Bit Docs
Envs 是完整的开发环境,配备了编译器、测试器、linter 工具、格式器、文档编辑工具和自身已搭建好的工作流程。
由于 Bit 是关于组件(components)和 组件 驱动的开发,Envs 本身就是组件,支持独立的组件开发,而不仅仅只是支持完整的应用程序。
— 市场上是否还有对 Rome 的需求见仁见智。
Rome 入门
开始使用 Rome 之前,你需要在项目中初始化 Rome 配置,可以通过全局安装 Rome 或使用 NPX 来完成,如下所示:
npm install -g rome
rome init
或者
npx rome init
init命令执行两件事:
-
生成
.config/rome.rjson文件,这是 Rome 的配置文件 -
生成
.editorconfig文件,为支持 EditorConfig 的编辑器设置缩进规则
Rome 项目配置的具体信息可以在这儿获取,但本教程不需要你进行任何配置。
初始设置完成之后,我们来看看 Rome 的代码检测功能是如何工作的。
Rome 代码检测功能
Rome 的代码检测功能(linting feature)因其能够输出全面的诊断信息,而从其他工具中脱颖而出。用户界面中会出现错误信息,并提供建议使用的修复方法。
为了测试代码检测功能,我们创建一个 index.js 文件,代码如下:
let a,
b = "Hello";
if (a == b) console.log("Hello World");
现在我们就有了一个准备好的 JavaScript 文件以供检测,运行 rome check 命令,让 Rome 检测代码中存在什么问题。
npx rome check
请注意,你也可以自定义 Rome 扫描待检测文件或目录的数量。
以下的命令行将使 Rome 单独检测 index.js 文件和 source/ 文件夹:
npx rome check index.js source/
Here’s an example of the rome check command output in my Terminal:
下面的例子是在我的终端中执行 rome check 命令后的输出结果:

从上面的截图可以看出,Rome 以丰富的格式生成检测报告,显示了文件、行号和代码所违反的语法规则。 FIXABLE 标签代表 Rome 能够提供一个修改方案。
红色的 ✖ 图标用一句话概括了问题,然后是有问题的代码片段。当问题可以被修复而不引起任何进一步的错误时,就会显示 Safe fix。
如果要自动采用修改方案,你可以在命令中添加--apply标志。这与 ESLint 的--fix标志相似。
npx rome check index.js --apply
当你采取了这些修复措施后,Rome 会报出 index.js 文件里还有一个问题:

上面的输出结果显示,虽然 Rome 建议你应该使用严格的等价比较(===),但它也承认你可以依靠强制类型转换(type coercion)来运行你的代码。
这就是为什么它会判定这样修复代码是不安全的,且在没有你同意的情况下不会应用该修改办法。
Rome 有 --review 功能,允许用户审查并决定如何处理在代码中发现的每个问题。
我们来看看 Rome 的 review 功能是如何处理 index.js 文件的:
npx rome check index.js --review
现在 Rome 会要求你对发现的每一个问题提供处理意见:

你可以选择直接采用建议的修复方法,或者命令 Rome 忽略这个问题,或者什么都不做。
当你结合使用 Rome 的应用和审查功能,你可以立即将明显无误的修改建议应用到你的代码中,只审查那些需要多加注意的修改意见。
恢复被 Rome 修改过的文件
在修改任何文件之前,Rome 也会保存一份所有文件的副本。如果修改之后产生了另一个错误,你可以撤销修改,而不必依赖 Git commit。
rome recover 命令允许你访问文件副本。
使用 rome recover list 命令可以展示已储存的操作命令:

为确保最低限度的内存使用率,Rome 只会存储最近的 5 条改动文件的指令。
你可以使用 rome recover pop 命令来恢复最近的保存记录。
如果要恢复特定记录的话,可以使用 rome recover apply <id> 命令。<id> 就是长条横线前的那一行(在上面的截图中,<id> 指的就是 1632551973576-check-0 )。
最后,通过执行 rome recover diff 命令 Rome 也可以为你展示那些已经获得应用的修改:

大部分 Rome linter 的语法规则都是为了 JavaScript、 TypeScript、 和 React 而编写。 点击 Rome linter 可查看语法规则的完整列表。
总结
Rome 是一个全新的 JavaScript 开发工具,其野心是成为 JavaScript 项目开发时你唯一需要用到的工具。
这感觉像是一个不可能实现的目标,但在尝试了代码检测功能之后,我认为见证 Rome 的发展历程以及它在未来将为 JavaScript 开发者提供什么样别开生面的功能,会是非常有趣的一件事。
Rome linter 的应用、审查和恢复功能非常出色,因为你可以立即对错误明显的代码进行修正,审查可能导致进一步问题的修改意见,并在错误产生之后撤销修改。
无论 Rome 最后是成功还是失败,毫无疑问的是,它会向我们展示在 JavaScript 开发工具领域还有哪些改进的可能。
欲了解更多信息,请查看 Rome GitHub 主页。