如何让 Flow 理解为 Node.js 编写的代码?
How to make Flow understand code written for Node.js?
我刚刚开始使用 Flow,试图将其引入现有的 Node 代码库。
这里有两行 Flow 抱怨:
import Module from 'module';
const nodeVersion = Number(process.versions.node.split('.')[0]);
关于这几行的警告分别是:
module. Required module not found
call of method `split`. Method cannot be called on possibly null value
所以看起来 Flow 并不知道一些在 Node 环境中是标准的东西(例如 process.versions.node
保证是一个字符串,并且有 definitely 一个名为 module
).
的内置节点
但是话又说回来,Flow 的 configuration docs 建议它默认是节点感知的。我还有很多其他东西,比如 import fs from 'fs';
, 不会 引起任何警告。那我做错了什么?
模块 fs
按预期工作,因为 Flow 带有内置定义,请参阅 declare module "fs"
此处:https://github.com/facebook/flow/blob/master/lib/node.js#L624
关于process.versions.node
,您可以在同一个文件中看到versions
键被键入为可为空字符串的映射,没有提及具体的node
属性:versions : { [key: string] : ?string };
。所以你需要做一个 PR 来改进这个定义,或者调整你的代码以适应该值是否为 null 的可能性。
我想关于模块 "module" 的答案现在很明显了——在 lib/node.js
的 Flow 中没有针对该模块的内置定义。您可以编写自己的定义,并可选择将它们与 PR 一起发送给 Flow 团队。您也可以尝试在 github 中搜索这些,可能有人已经完成了这项工作。
那个 lib
目录非常有用,它有 DOM 和其他内容的流定义。
我刚刚开始使用 Flow,试图将其引入现有的 Node 代码库。
这里有两行 Flow 抱怨:
import Module from 'module';
const nodeVersion = Number(process.versions.node.split('.')[0]);
关于这几行的警告分别是:
module. Required module not found
call of method `split`. Method cannot be called on possibly null value
所以看起来 Flow 并不知道一些在 Node 环境中是标准的东西(例如 process.versions.node
保证是一个字符串,并且有 definitely 一个名为 module
).
但是话又说回来,Flow 的 configuration docs 建议它默认是节点感知的。我还有很多其他东西,比如 import fs from 'fs';
, 不会 引起任何警告。那我做错了什么?
模块 fs
按预期工作,因为 Flow 带有内置定义,请参阅 declare module "fs"
此处:https://github.com/facebook/flow/blob/master/lib/node.js#L624
关于process.versions.node
,您可以在同一个文件中看到versions
键被键入为可为空字符串的映射,没有提及具体的node
属性:versions : { [key: string] : ?string };
。所以你需要做一个 PR 来改进这个定义,或者调整你的代码以适应该值是否为 null 的可能性。
我想关于模块 "module" 的答案现在很明显了——在 lib/node.js
的 Flow 中没有针对该模块的内置定义。您可以编写自己的定义,并可选择将它们与 PR 一起发送给 Flow 团队。您也可以尝试在 github 中搜索这些,可能有人已经完成了这项工作。
那个 lib
目录非常有用,它有 DOM 和其他内容的流定义。