我在新的https://github.com/davezuko/react-redux-starter-kit项目中使用flow init
初始化了流程项目。
当Flow检查时,它会在node_modules中发现几个错误。 错误发生在/ * flow * /带注释的库文件中。
看起来像这样:
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忽略这些文件吗?我认为它可能会影响类型检查的正确性。
答案 0 :(得分:29)
fbj和版本都是使用Flow编写的。它们每个都有.flowconfig
个文件,各种配置。您看到的所有错误都是由于.flowconfig
的配置略有不同。
最简单的解决方法是修改.flowconfig
以支持版本和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/中的库定义,因此我们会围绕流程投资定义和工具-typed。这样可以避免您遇到的那种情况。
答案 1 :(得分:3)
我个人喜欢忽略node_modules下的所有内容。
[ignore]
.*/node_modules/.*
然后我使用flow-typed来安装或存根所有导入 https://github.com/flowtype/flow-typed