Javascript 节点_模块中的流类型检查器错误/*

Javascript 节点_模块中的流类型检查器错误/*,javascript,flowtype,Javascript,Flowtype,我已经在fresh project中用flow init初始化了flow project 当Flow进行检查时,它会在node_模块中发现几个错误。 /*flow*/带注释的库文件中发生错误 看起来是这样的: node_modules/editions/source/index.js:33 33: const {name, editions} = require(packagePath) ^^^^^^^^^^^^^^^^^

我已经在fresh project中用
flow init
初始化了flow project

当Flow进行检查时,它会在node_模块中发现几个错误。 /*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
node_modules/editions/source/index.js:33
33:const{name,editions}=require(packagePath)
^^^^^^^^^^^^^^^^^^^^传递给require()的参数必须是文本字符串。
node_modules/fbjs/lib/Deferred.js.flow:60
60:承诺.原型.完成.应用(这个._承诺,论点);
^^^^属性“完成”。在中找不到属性
474:宣布集体承诺{
^Promise.See lib:/private/tmp/flow/flowlib_d344ebcf/core.js:474
node_modules/fbjs/lib/shallowEqual.js.flow:29
29:返回x!==0 | | 1/(x:$FlowIssue)==1/(y:$FlowIssue);
^^^^^^^^^^标识符“$FlowIssue”。无法解析名称

我应该让Flow忽略这些文件吗?我认为这可能会影响类型检查的正确性。

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

最简单的修复方法是修改
.flowconfig
,以支持edition和FBJ使用的东西

  • 模块.ignore\u non\u literal\u requires=true
    添加到
    [options]
    部分应修复第一个错误。默认情况下,如果将变量传递到
    require()
    ,则流将出错,因为流希望了解依赖关系图。此选项可缓解此要求
  • /node\u modules/fbjs/flow/lib
    添加到
    [libs]
    部分应该可以修复第二个错误。fbjs使用非标准版本的
    Promise
    ,但该版本的
    Promise
    附带了库定义
  • suppress\u type=$FlowIssue
    添加到
    [options]
    部分应该可以修复第三个错误。此选项只是将
    any
    类型别名为
    $FlowIssue
    。当您使用
    any
    来抑制错误时,它会更加清晰

  • 在未来,Flow团队设想Flow用户将选择完全忽略
    node\u模块/
    ,而是依赖来自的库定义,因此我们将围绕Flow类型投资定义和工具。这将避免您遇到的那种情况。

    我个人喜欢忽略node下的所有内容_通过这样做来创建模块

    [ignore]
    .*/node_modules/.*
    
    然后,我使用流类型来安装或存根所有导入

    我建议不要这样做。如果NPM包具有一流的流支持,这将导致流忽略其类型。不同意,这不是一个好的解决方案,因为您将忽略流类型目录中可能还不存在的包的流定义。
    流类型的问题是您必须手动管理E <代码>流类型 DIR和在代码>包中的依赖关系。JSON < /代码>。我的意思是,这不是必须的,但是对于一个干净的项目来说,这是你必须考虑的事情。@ RavaelVIDAURE,当我不忽略My.FuffCiFig中的NoDEN1模块时,我得到了数千个流错误,而我的计算机开始发狂,试图在所有O上运行流。但是,我很想得到npm模块的作者制作的流类型。你如何处理大多数不使用流的模块中给出的所有额外错误?现在有
    [声明]
    ,它似乎适用于
    */node\u modules/*
    ,但我不确定它是否有任何负面影响,所以我问:我们现在应该把所有
    node\u模块
    放在
    [声明]
    中吗?