【问题标题】:Flow type checker errors in node_modules/*node_modules/* 中的流类型检查器错误
【发布时间】:2016-11-08 14:17:32
【问题描述】:

我在新的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 忽略这些文件吗?我认为它可能会影响类型检查的正确性。

【问题讨论】:

    标签: javascript flowtype


    【解决方案1】:

    fbjs 和版本都是使用 Flow 编写的。它们每个都有 .flowconfig 具有各种配置的文件。您看到的所有错误都是由于您的 .flowconfig 配置略有不同。

    最简单的解决方法是修改您的 .flowconfig 以支持 edition 和 fbjs 正在使用的东西。

    1. module.ignore_non_literal_requires=true 添加到[options] 部分应该可以修复第一个错误。默认情况下,如果您将变量传递给require(),Flow 将出错,因为 Flow 想要了解依赖关系图。此选项放宽了这一要求。
    2. ./node_modules/fbjs/flow/lib 添加到[libs] 部分应该可以修复第二个错误。 fbjs 使用非标准版本的Promise,但它确实附带了该版本Promise 的库定义。
    3. suppress_type=$FlowIssue 添加到[options] 部分应该可以修复第三个错误。此选项只是将any 类型别名为$FlowIssue。当您使用 any 抑制错误时,它会更清楚。

    未来,Flow 团队设想 Flow 用户会选择完全忽略 node_modules/,而是依赖来自 https://github.com/flowtype/flow-typed/ 的库定义,因此我们正在围绕流类型投资定义和工具。这将避免您遇到的那种情况。

    【讨论】:

    【解决方案2】:

    我个人喜欢通过这样做来忽略 node_modules 下的所有内容。

    [ignore]
    .*/node_modules/.*
    

    然后我使用流类型来安装或存根所有导入 https://github.com/flowtype/flow-typed

    【讨论】:

    • 我建议不要这样做。如果 NPM 包具有一流的 Flow 支持,这将导致 flow 忽略其类型。
    • 不同意,这不是一个好的解决方案,因为您将忽略流类型目录中可能尚不存在的包的流定义
    • flow-typed 的问题是您必须手动管理flow-typed 目录和package.json 中的依赖项之间的同步。我的意思是,这不是必需的,但对于一个干净的项目,这是你必须考虑的事情。
    • @RafaelVidaurre 当我不忽略我的 .flowconfig 中的 node_modules 时,我会收到数千个流错误,并且我的计算机开始吓坏了,试图在所有这些文件上运行流。但是,我很想获得 npm 模块的作者制作的流类型。您如何处理大多数不使用流程的模块中给出的所有额外错误?
    • 现在有[declarations],它似乎适用于.*/node_modules/.*,但我不确定它是否有任何缺点,所以我问:stackoverflow.com/questions/66487847/…
    猜你喜欢
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    相关资源
    最近更新 更多