.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
。