node_modules/* 中的流类型检查器错误
Flow type checker errors in node_modules/*
我在新 https://github.com/davezuko/react-redux-starter-kit 项目中用 flow init
初始化了流程项目。
当 Flow 检查时,它在 node_modules 中发现了几个错误。
/* 流 */ 带注释的库文件中发生错误。
看起来像这样:
node_modules/editions/source/index.js:33
33: const {name, editions} = require(packagePath)
^^^^^^^^^^^^^^^^^^^^ The parameter passed to require() must be a literal string.
node_modules/fbjs/lib/Deferred.js.flow:60
60: Promise.prototype.done.apply(this._promise, arguments);
^^^^ property `done`. Property not found in
474: declare class Promise<+R> {
^ Promise. See lib: /private/tmp/flow/flowlib_d34ebcf/core.js:474
node_modules/fbjs/lib/shallowEqual.js.flow:29
29: return x !== 0 || 1 / (x: $FlowIssue) === 1 / (y: $FlowIssue);
^^^^^^^^^^ identifier `$FlowIssue`. Could not resolve name
我应该让 Flow 忽略这些文件吗?我认为它可能会影响类型检查的正确性。
fbjs和版本都是用Flow写的。他们每个人都有 .flowconfig
个配置各异的文件。您看到的所有错误都是由于您的 .flowconfig
配置略有不同。
最简单的解决方法是修改 .flowconfig
以支持 edition 和 fbjs 使用的内容。
- 将
module.ignore_non_literal_requires=true
添加到 [options]
部分应该可以修复第一个错误。默认情况下,如果您将变量传递给 require()
,Flow 将出错,因为 Flow 想要了解依赖关系图。此选项放宽了此要求。
- 将
./node_modules/fbjs/flow/lib
添加到 [libs]
部分应该可以修复第二个错误。 fbjs 使用 Promise
的非标准版本,但它确实附带了 Promise
. 版本的库定义
- 将
suppress_type=$FlowIssue
添加到 [options]
部分应该可以修复第三个错误。此选项只是将 any
类型别名为 $FlowIssue
。当您使用 any
来抑制错误时,它会更清楚。
未来,Flow 团队设想 Flow 用户会选择完全忽略 node_modules/
,而是依赖 https://github.com/flowtype/flow-typed/ 中的库定义,因此我们正在围绕 Flow 投资定义和工具-打字。这将避免您 运行 遇到的那种情况。
我个人喜欢通过这样做忽略 node_modules 下的所有内容。
[ignore]
.*/node_modules/.*
然后我使用流式安装或存根所有导入
https://github.com/flowtype/flow-typed
我在新 https://github.com/davezuko/react-redux-starter-kit 项目中用 flow init
初始化了流程项目。
当 Flow 检查时,它在 node_modules 中发现了几个错误。 /* 流 */ 带注释的库文件中发生错误。
看起来像这样:
node_modules/editions/source/index.js:33
33: const {name, editions} = require(packagePath)
^^^^^^^^^^^^^^^^^^^^ The parameter passed to require() must be a literal string.
node_modules/fbjs/lib/Deferred.js.flow:60
60: Promise.prototype.done.apply(this._promise, arguments);
^^^^ property `done`. Property not found in
474: declare class Promise<+R> {
^ Promise. See lib: /private/tmp/flow/flowlib_d34ebcf/core.js:474
node_modules/fbjs/lib/shallowEqual.js.flow:29
29: return x !== 0 || 1 / (x: $FlowIssue) === 1 / (y: $FlowIssue);
^^^^^^^^^^ identifier `$FlowIssue`. Could not resolve name
我应该让 Flow 忽略这些文件吗?我认为它可能会影响类型检查的正确性。
fbjs和版本都是用Flow写的。他们每个人都有 .flowconfig
个配置各异的文件。您看到的所有错误都是由于您的 .flowconfig
配置略有不同。
最简单的解决方法是修改 .flowconfig
以支持 edition 和 fbjs 使用的内容。
- 将
module.ignore_non_literal_requires=true
添加到[options]
部分应该可以修复第一个错误。默认情况下,如果您将变量传递给require()
,Flow 将出错,因为 Flow 想要了解依赖关系图。此选项放宽了此要求。 - 将
./node_modules/fbjs/flow/lib
添加到[libs]
部分应该可以修复第二个错误。 fbjs 使用Promise
的非标准版本,但它确实附带了Promise
. 版本的库定义
- 将
suppress_type=$FlowIssue
添加到[options]
部分应该可以修复第三个错误。此选项只是将any
类型别名为$FlowIssue
。当您使用any
来抑制错误时,它会更清楚。
未来,Flow 团队设想 Flow 用户会选择完全忽略 node_modules/
,而是依赖 https://github.com/flowtype/flow-typed/ 中的库定义,因此我们正在围绕 Flow 投资定义和工具-打字。这将避免您 运行 遇到的那种情况。
我个人喜欢通过这样做忽略 node_modules 下的所有内容。
[ignore]
.*/node_modules/.*
然后我使用流式安装或存根所有导入 https://github.com/flowtype/flow-typed