我刚刚开始使用 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
保证是一个字符串,并且肯定有 一个名为 module
的 Node 内置函数。
但话又说回来,Flow 的 configuration docs建议默认情况下它是节点感知的。我还有很多其他东西,例如 import fs from 'fs';
,它不会导致任何警告。那么我做错了什么?
最佳答案
模块 fs
按预期工作,因为 Flow 附带了它的内置定义,请参阅此处声明模块“fs”
:https://github.com/facebook/flow/blob/master/lib/node.js#L624
关于process.versions.node
,您可以在同一个文件中看到versions
键被键入为可为空字符串的映射,没有提及具体的node
属性:版本:{ [key: string] : ?string };
。因此,您需要制作 PR 来改进此定义,或者调整您的代码以了解该值为 null 的可能性。
我想关于模块“module”的答案现在很明显了——在 lib/node.js
的 Flow 中没有该模块的内置定义。您可以编写自己的定义,并可以选择将 PR 连同它们一起发送给 Flow 团队。您也可以尝试在 github 上搜索这些内容,可能有人已经完成了这项工作。
顺便说一句,lib
目录非常有用,它还有 DOM 和其他内容的 Flow 定义。
关于flowtype - 如何让 Flow 理解为 Node.js 编写的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39396135/