.flowconfig [选项]
.flowconfig 文件中的 [选项] 部分可以包含多个键值对,格式为
[options]
keyA=valueA
keyB=valueB
任何省略的选项将使用其默认值。某些选项可以通过命令行标志覆盖。
可用选项
all
类型:boolean
将此设置为 true 以检查所有文件,而不仅仅是包含 @flow 的文件。
all 的默认值为 false。
autoimports ≥0.143.0
类型:boolean
启用后,IDE 自动完成会建议其他文件的导出,并且会自动插入必要的 import 语句。对于未定义的变量,还会提供一个“快速修复”代码操作,建议匹配的导入。
从 Flow v0.155.0 开始,autoimports 的默认值为 true。
babel_loose_array_spread
类型:boolean
将此设置为 true 以检查数组展开语法仅用于数组,而不是任意可迭代对象(例如 Map 或 Set)。如果您使用 Babel 在 宽松模式 下转换代码,这将很有用,因为该模式在运行时会做出这种非规范的假设。
例如
const set = new Set();
const values = [...set]; // Valid ES2015, but Set is not compatible with $ReadOnlyArray in Babel loose mode
babel_loose_array_spread 的默认值为 false。
emoji
类型:boolean
将此设置为 true 以在 Flow 忙于检查您的项目时输出的状态消息中添加表情符号。
emoji 的默认值为 false。
enums
类型:boolean
将此设置为 true 以启用 Flow 枚举。除了启用 .flowconfig 选项之外,还需要 其他步骤。
enums 的默认值为 false。
exact_by_default
类型:boolean
当设置为 true(从版本 0.202 开始的默认值)时,Flow 默认将对象类型解释为精确类型
1type O1 = {foo: number} // exact2type O2 = {| foo: number |} // exact3type O3 = {foo: number, ...} // inexact当此标志为 false 时,Flow 将具有以下行为
1type O1 = {foo: number} // inexact2type O2 = {| foo: number |} // exact3type O3 = {foo: number, ...} // inexact- 从开始到 Flow 版本 0.199,该标志的默认值为
false。 - 在版本 0.200 和 0.201 中,需要显式将该标志设置为
true或false。 - 从版本 0.202 开始,默认值为
true。
您可以在我们的博客文章中阅读有关此更改的更多信息,该文章介绍了如何 默认情况下将对象类型设置为精确类型。
experimental.const_params
类型:boolean
将此设置为 true 使 Flow 将所有函数参数视为 const 绑定。重新分配参数是一个错误,这使 Flow 在细化方面不那么保守。
默认值为 false。
include_warnings
类型:boolean
将此设置为 true 使 Flow 命令在错误输出中包含警告。默认情况下,警告在 CLI 中隐藏,以避免控制台输出过多。(IDE 是显示警告的更好界面。)
默认值为 false。
lazy_mode
类型:boolean
有关延迟模式的更多信息,请参阅 延迟模式文档。
在 .flowconfig 中设置 lazy_mode 将导致该根目录的新 Flow 服务器使用延迟模式(如果设置为 false,则不使用延迟模式)。可以使用 --lazy-mode 标志从 CLI 覆盖此选项。
默认值为 false。
max_header_tokens
类型:integer
Flow 试图避免解析非 Flow 文件。这意味着 Flow 需要开始对文件进行词法分析,以查看其中是否包含 @flow 或 @noflow。此选项允许您配置 Flow 在决定没有相关文档块之前对文件进行词法分析的程度。
- 既不包含
@flow也不包含@noflow- 使用 Flow 语法禁用解析此文件,并且不进行类型检查。 @flow- 使用 Flow 语法启用解析此文件,并进行类型检查。@noflow- 使用 Flow 语法启用解析此文件,但不进行类型检查。这被认为是一种逃生舱口,用于在不删除所有 Flow 特定语法的情况下抑制 Flow。
max_header_tokens 的默认值为 10。
module.file_ext
默认情况下,Flow 将查找扩展名为 .js、.jsx、.mjs、.cjs 和 .json 的文件。您可以使用此选项覆盖此行为。
例如,如果您执行
[options]
module.file_ext=.foo
module.file_ext=.bar
那么 Flow 将改为查找扩展名为 .foo 和 .bar 的文件。
注意:您可以多次指定
module.file_ext
module.ignore_non_literal_requires
类型:boolean
将此设置为 true,Flow 将不再抱怨您使用 require() 时使用字符串文字以外的其他内容。
默认值为 false。
module.name_mapper
类型:regex -> string
指定一个正则表达式来匹配模块名称,以及一个替换模式,用 -> 分隔。
例如
module.name_mapper='^image![a-zA-Z0-9$_]+$' -> 'ImageStub'
这使 Flow 将 require('image!foo.jpg') 视为 require('ImageStub')。
这些是 OCaml 正则表达式。使用 \( 和 \)(需要斜杠!)来创建一个捕获组,您可以在替换模式中将其引用为 \1(最多 \9)。
注意:您可以多次指定
module.name_mapper
module.name_mapper.extension
类型:string -> string
指定一个要匹配的文件扩展名和一个替换模块名称,用 -> 分隔。
注意:这只是
module.name_mapper='^\(.*\)\.EXTENSION$' -> 'TEMPLATE'的简写形式)
例如
module.name_mapper.extension='css' -> '<PROJECT_ROOT>/CSSFlowStub.js.flow'
使 Flow 将 require('foo.css') 视为 require(PROJECT_ROOT + '/CSSFlowStub')。
注意:您可以为不同的扩展名多次指定
module.name_mapper.extension。
module.system
类型:node | haste
用于解析 import 和 require 的模块系统。Haste 模式由 Meta 使用。
默认值为 node。
module.system.node.main_field
类型:string
Flow 读取 package.json 文件以获取 "name" 和 "main" 字段,以确定模块的名称以及应使用哪个文件来提供该模块。
因此,如果 Flow 在 .flowconfig 中看到以下内容
[options]
module.system.node.main_field=foo
module.system.node.main_field=bar
module.system.node.main_field=baz
然后它遇到一个包含以下内容的 package.json
{
"name": "kittens",
"main": "main.js",
"bar": "bar.js",
"baz": "baz.js"
}
Flow 将使用 bar.js 来提供 "kittens" 模块。
如果未指定此选项,Flow 将始终使用 "main" 字段。
有关原始动机,请参阅 此 GitHub 问题
module.system.node.resolve_dirname
类型:string
默认情况下,Flow 将在名为 node_modules 的目录中查找节点模块。您可以使用此选项配置此行为。
例如,如果您执行
[options]
module.system.node.resolve_dirname=node_modules
module.system.node.resolve_dirname=custom_node_modules
然后 Flow 将在名为 node_modules 或 custom_node_modules 的目录中查找。
注意:您可以多次指定
module.system.node.resolve_dirname
module.use_strict
类型:boolean
如果您使用的是将 "use strict"; 添加到每个模块顶部的转译器,请将此设置为 true。
默认值为 false。
munge_underscores
类型:boolean
将此设置为 true 使 Flow 将下划线开头的类属性和方法视为私有。这应该与 jstransform 的 ES6 类转换 一起使用,该转换在运行时强制执行相同的私有性。
默认值为 false。
no_flowlib
类型:boolean
Flow 具有内置的库定义。将此设置为 true 将告诉 Flow 忽略内置的库定义。
默认值为 false。
react.runtime ≥0.123.0
类型:automatic | classic
如果您在 @babel/plugin-transform-react-jsx 中使用 React 的自动运行时,请将此设置为 automatic。否则,请使用 classic。有关转换的详细信息,请参阅 Babel 文档。
默认值为 classic。
server.max_workers
类型:integer
Flow 服务器可以启动的最大工作进程数。默认情况下,服务器将使用所有可用的核心。
sharedmemory.hash_table_pow
类型:unsigned integer
共享内存的 3 个最大部分是依赖关系表、哈希表和堆。虽然堆会增长和缩小,但这两个表会完全分配。此选项允许您更改哈希表的大小。
将此选项设置为 X 表示该表将支持最多 2^X 个元素,即 16*2^X 字节。
默认情况下,此设置为 19(表大小为 2^19,即 8 兆字节)
sharedmemory.heap_size
类型:unsigned integer
此选项配置共享堆的最大可能大小。您很可能不需要配置它,因为它实际上不会影响 RSS Flow 使用多少内存。但是,如果您正在处理一个庞大的代码库,您可能会在初始化后看到以下错误:"Heap init size is too close to max heap size; GC will never get triggered!" 在这种情况下,您可能需要增加堆的大小。
默认情况下,它设置为 26843545600(25 * 2^30 字节,即 25GiB)
suppress_type
类型:string
此选项允许您将 any 与给定的字符串关联。这对于解释您为什么使用 any 很有用。例如,假设您有时想使用 any 来抑制错误,有时想将其标记为 TODO。您的代码可能如下所示
const myString: any = 1 + 1;
const myBoolean: any = 1 + 1;
如果您将以下内容添加到您的配置中
[options]
suppress_type=$FlowFixMe
suppress_type=$FlowTODO
您可以将您的代码更新为更易读的
const myString: $FlowFixMe = 1 + 1;
const myBoolean: $FlowTODO = 1 + 1;
注意:您可以多次指定
suppress_type。
traces
类型:integer
在所有错误输出上启用跟踪(显示有关类型在系统中流动的更多详细信息),深度由您指定。这可能非常昂贵,因此默认情况下处于禁用状态。
use_mixed_in_catch_variables ≥0.201
类型:boolean
将 catch 变量的默认类型从 any 更改为 mixed。例如
1try {2} catch (e) {3}在上面的示例中,如果该选项为 true,则 catch 将被类型化为 mixed,因为它缺少显式类型注释。
已弃用的选项
以下选项在最新版本的 Flow 中不再存在
esproposal.class_instance_fields ≤0.148
类型:enable | ignore | warn
将其设置为 warn 表示 Flow 应该在使用实例 类字段 时发出警告,根据待定的规范。
您也可以将其设置为 ignore 表示 Flow 应该简单地忽略语法(即 Flow 不会使用此语法来指示类实例上存在属性)。
此选项的默认值为 enable,它允许使用此提议的语法。
esproposal.class_static_fields ≤0.148
类型:enable | ignore | warn
将其设置为 warn 表示 Flow 应该在使用静态 类字段 时发出警告,根据待定的规范。
您也可以将其设置为 ignore 表示 Flow 应该简单地忽略语法(即 Flow 不会使用此语法来指示类上存在静态属性)。
此选项的默认值为 enable,它允许使用此提议的语法。
esproposal.decorators ≤0.148
类型:ignore | warn
将其设置为 ignore 表示 Flow 应该忽略装饰器。
此选项的默认值为 warn,它在使用时会发出警告,因为此提议仍处于非常早期的阶段。
esproposal.export_star_as ≤0.148
类型:enable | ignore | warn
将其设置为 enable 表示 Flow 应该支持来自 leebyron 的提议 的 export * as 语法。
您也可以将其设置为 ignore 表示 Flow 应该简单地忽略语法。此选项的默认值为 warn,它在使用时会发出警告,因为此提议仍处于非常早期的阶段。
esproposal.optional_chaining ≤0.148
类型:enable | ignore | warn
将其设置为 enable 表示 Flow 应该支持根据待定的规范使用 可选链。
您也可以将其设置为 ignore 表示 Flow 应该简单地忽略语法。
此选项的默认值为 warn,它在使用时会发出警告,因为此提议仍处于非常早期的阶段。
esproposal.nullish_coalescing ≤0.148
类型:enable | ignore | warn
将其设置为 enable 表示 Flow 应该支持根据待定的规范使用 空值合并运算符。
您也可以将其设置为 ignore 表示 Flow 应该简单地忽略语法。
此选项的默认值为 warn,它在使用时会发出警告,因为此提议仍处于非常早期的阶段。
inference_mode ≥0.184.0 ≤0.202.0
类型:classic | constrain-writes
将其设置为 constrain-writes 将启用受限写入推理模式。
有关更多信息,请参阅 变量声明文档。
默认值为 classic
log.file
类型:string
日志文件的路径(默认为 /tmp/flow/<escaped root path>.log)。
sharedmemory.dirs
类型:string
这仅影响 Linux。
Flow 的共享内存位于内存映射文件中。在较新的 Linux 版本(3.17+)中,有一个系统调用 memfd_create 允许 Flow 匿名创建文件,并且仅在内存中。但是,在较旧的内核中,Flow 需要在文件系统上创建文件。理想情况下,此文件位于内存支持的 tmpfs 上。此选项允许您决定该文件在何处创建。
默认情况下,此选项设置为 /dev/shm 和 /tmp
注意:您可以多次指定
sharedmemory.dirs。
sharedmemory.minimum_available
类型:unsigned integer
这仅影响 Linux。
如 sharedmemory.dirs 选项说明中所述,Flow 需要在较旧的内核的文件系统上创建文件。sharedmemory.dirs 指定了可以创建共享内存文件的多个位置列表。对于每个位置,Flow 将检查文件系统是否有足够的共享内存文件空间。如果 Flow 可能会耗尽空间,它将跳过该位置并尝试下一个位置。此选项允许您配置文件系统上共享内存所需的最小空间量。
默认情况下,它是 536870912(2^29 字节,即半吉字节)。
strip_root ≤0.48
类型:boolean
已过时。将其设置为 true 以在使用 --json、--from emacs 和 --from vim 时始终从错误消息中的文件路径中剥离根目录。不要使用此选项。相反,传递命令行标志 --strip-root。
默认情况下,它是 false。
suppress_comment ≤0.126
类型:regex
定义一个神奇的注释,它会抑制下一行上的所有 Flow 错误。例如
suppress_comment= \\(.\\|\n\\)*\\$FlowFixMe
将匹配这样的注释
// $FlowFixMe: suppressing this error until we can refactor
var x : string = 123;
并抑制错误。如果下一行没有错误(抑制是不必要的),则会显示“未使用的抑制”警告。
如果您的配置中没有指定任何抑制注释,Flow 将应用一个默认注释:// $FlowFixMe。
注意:您可以多次指定
suppress_comment。如果您确实定义了任何suppress_comment,则内置的$FlowFixMe抑制将被您指定的正则表达式擦除。如果您希望将$FlowFixMe与一些额外的自定义抑制注释一起使用,则必须在您的自定义抑制列表中手动指定\\(.\\|\n\\)*\\$FlowFixMe。
注意:在 v0.127.0 版本中,指定抑制注释语法的选项已被删除。
$FlowFixMe、$FlowIssue、$FlowExpectedError和$FlowIgnore成为唯一的标准抑制。
temp_dir
类型:string
告诉 Flow 使用哪个目录作为临时目录。可以使用命令行标志 --temp-dir 覆盖。
默认值为 /tmp/flow。
types_first ≥0.125.0 ≤0.142
类型:boolean
有关类型优先模式的更多信息,请参阅 类型优先文档。
Flow 构建中间工件来表示模块的签名,因为它们正在被检查。如果此选项设置为 false,则这些工件将使用推断的类型信息构建。如果此选项设置为 true,则它们将使用模块边界处的类型注释构建。
types_first 的默认值为 true(从 0.134 版本开始)。
well_formed_exports ≥0.125.0 ≤0.142
类型:boolean
对文件导出实施以下限制
- 操作
module.exports和exports别名的语句只能作为顶层语句出现。 - 从文件的导出可见的源代码部分需要进行注释,除非它们的类型可以被微不足道地推断(例如,导出的表达式是数字文字)。这是类型优先模式正常运行的必要条件。未能正确注释导出会导致
signature-verification-failure。
此选项默认设置为 true,因为它是由 types_first 隐含的,但当将项目从经典模式升级到类型优先模式时,此选项本身很有用。
well_formed_exports.includes ≥0.128.0 ≤0.142
类型:string
将 well_formed_exports 要求的范围限制到此项目的特定目录。例如
well_formed_exports=true
well_formed_exports.includes=<PROJECT_ROOT>/dirA
well_formed_exports.includes=<PROJECT_ROOT>/dirB
将仅在 dirA 和 dirB 下的文件中报告与导出相关的错误。此选项要求 well_formed_exports 设置为 true。
此选项的目的是帮助为 Flow 类型优先模式准备代码库。
在 v0.125.0 和 v0.127.0 版本之间,此选项名为 well_formed_exports.whitelist。