【问题标题】:Can I make Flow use an arbitrary Babel plugin (or other code-transforming widget)?我可以让 Flow 使用任意 Babel 插件(或其他代码转换小部件)吗?
【发布时间】:2021-01-21 19:51:30
【问题描述】:

我正在使用 Create React App 和 Flow。我可以通过在 config-overrides.js 中指定它们来添加任意 Babel 插件以在 Create React App 中使用(在 react-app-rewired 和 customize-cra 的帮助下)。我可以通过在 babel.config.js 中命名它们来添加用于我的 Jest 测试的 Babel 插件。通过这些方式,我可以在这些工具有机会被我想使用的任何非标准语法(例如 JavaScript 装饰器)混淆之前转换代码。

但我不知道如何为 Flow 做同样的事情。它似乎不接受 Babel 插件。也许它完全自己解析代码,甚至不使用 Babel?我不知道。 Flow 本身是否需要插件?我不知道。

我是否有一些简单的方法可以将函数插入某些工具或其他工具中,以便在 Flow 看到它之前任意转换我的代码?或者我是否真的必须深入研究 Flow 的源代码并对其进行修改才能完成此操作? (我对此没有足够的兴趣。)

【问题讨论】:

  • 为什么需要对Flow的代码进行改造?你有错误吗?如果是这样,发布您看到的代码/错误会很有帮助。
  • 我不想进入那个。如果我问错了问题,那么我仍然想知道答案!
  • Flow 无法运行 Babel 插件。如果您通过 Babel 使用实验性语法,那么它必须是 Flow 本身也知道如何处理的语法,因此在不知道您遇到什么错误或导致问题的语法的情况下,没有有用的方法可以为您回答这个问题.

标签: javascript babeljs flowtype


【解决方案1】:

[Flow] 似乎不接受 Babel 插件。

不,flow 支持一些提议的 ECMAScript 功能(其中一些以前在 flow 配置选项之后),但它没有任何类型的插件系统。

也许它完全自己解析代码,甚至不使用 Babel?

确实如此。 Flow 实现了一个fully-fledged JavaScript -> AST parser,可以完全独立于流类型检查器使用。

Flow 本身是否需要插件?我不知道。

没有。我认为this 是暗示这种可能性的最相关问题:

我可以想象的一个例子是,如果您想在流程前面放置一些 Babel 转换,将实验性/自定义语言功能转译回 ES6,而无需将其写入 JS 文件然后再次重新解析。

在这种情况下,他说如果流可以将任意兼容的 AST 作为输入并对其执行类型检查,那么 babel 转换可以在该 AST 上执行它被送入流中。

我是否有一些简单的方法可以将函数插入某些工具或其他工具中,以便在 Flow 看到它之前任意转换我的代码?或者我是否真的必须深入研究 Flow 的源代码并对其进行修改才能完成此操作? (我对此没有足够的兴趣。)

上面已经暗示了答案。您描述的工具通常是 babel。基本上,您可以在代码上运行 babel 转换以删除流无法识别的结构,然后使用流检查生成的中间 JavaScript 文件。就其本质而言,此解决方案排除了 LSP 或其他实时检查之类的可能性,因为您总是会在两步过程中执行全面检查。

归根结底,这种方法值得的情况很少。这个案例需要非常不标准。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2018-04-28
    相关资源
    最近更新 更多