在项目中启用枚举
升级工具
要在你仓库中启用 Flow 枚举,你必须先更新以下包
- 升级到至少 Flow 0.159
- Flow 需要设置一些配置才能启用枚举 - 请参见下文。
- 升级 Prettier 到至少版本 2.2
- 从该版本开始,Prettier 可以开箱即用地处理解析和美化 Flow 枚举。
- 你必须使用
flow
解析器选项 才能格式化 JavaScript 文件中的 Flow 枚举。
- 升级 Babel 到至少版本 7.13.0
- 从该版本开始,Babel 可以解析 Flow 枚举。但是,要启用此解析,需要提供一些配置,此外它不包含所需的转换 - 请参见下文。
- 升级 jscodeshift 到至少版本 0.11.0
- 升级 hermes-parser 到至少版本 0.4.8
- 对于 ESLint,可以:
- 使用 hermes-eslint 作为你的 ESLint 解析器,至少版本 0.4.8
- 或者升级 babel-eslint 到版本 10.1.0
- 从该版本开始,
babel-eslint
可以开箱即用地处理 Flow 枚举。 - 不要升级到 11.x,该分支不支持 Flow 枚举。
- 从该版本开始,
- 或者使用其他解决方案,使用 Babel 7.13.0 或更高版本,启用 Flow - 这也可能有效
如果你有任何其他检查代码的工具,你也需要更新它。如果它使用 flow-parser、hermes-parser 或 @babel/parser
,请根据上面的说明进行升级。如果它使用其他解析器,你需要在该解析器中实现解析 Flow 枚举的功能。你可以参考 Babel、Flow 和 Hermes 解析器中的现有代码来指导你的工作。
启用枚举
- 在你的
.flowconfig
中,在[options]
标题下,添加enums=true
- 添加 Flow 枚举 Babel 转换。它将枚举声明 AST 节点转换为对运行时的调用:babel-plugin-transform-flow-enums。将其添加到你的开发依赖项中,并调整你的 Babel 配置以使用该转换。该转换默认情况下需要直接使用运行时包(如下所示),但你可以对其进行配置。
- 将 Flow 枚举运行时包添加到你的生产依赖项中。这将在运行时需要并使用,以创建 Flow 枚举:flow-enums-runtime
启用建议的 ESLint 规则
枚举可以在 switch
语句中进行穷举检查,因此与之前相比,可能会增加 switch
语句的使用。为了防止 switch
语句中出现常见问题,我们建议你启用这些 ESLint 规则(至少作为警告)
- no-fallthrough: 这可以防止用户在 switch case 的末尾意外忘记
break
语句,同时支持常见用例。 - no-case-declarations: 这可以防止在 switch case 中引入词法作用域声明 (
let
、const
),而无需将该 case 包裹在一个新的块中。否则,不同 case 中的声明可能会冲突。
我们还有一些 Flow 枚举特定的规则,作为 eslint-plugin-fb-flow 的一部分
- use-flow-enums: 建议将类似枚举的
Object.freeze
和keyMirror
使用方式改为 Flow 枚举。 - flow-enums-default-if-possible: 自动修复具有与成员名称相同的指定值的字符串枚举,使其成为默认枚举。
- no-flow-enums-object-mapping: 建议使用带有 switch 的函数来将枚举值映射到其他值,而不是使用对象字面量。