在ReasonReact项目中为每个文件禁用react-jsx

是否可以在ReasonReact项目的某些文件中禁用react-jsx转换?

我认为可以通过以下方式实现另一种方法:不将"reason": { "react-jsx": 3 }添加到bsconfig.json并通过将@@bs.config({jsx: 3})添加到要进行react-jsx转换的文件的顶部,但这将迫使我在太多文件中添加此注释。

我想在几个文件中构建一个基于JSX的小型DSL,同时在项目的其余部分中受益于React

iCMS 回答:在ReasonReact项目中为每个文件禁用react-jsx

注意:建议的解决方案不是很简单,我认为在所有必需的文件中显式添加@@bs.config注释要简单得多,但是如果您真的不想这样做,可以以下可能有效。

如果我正确地阅读了the compiler code,则在ReasonReact ppx之前应用用户定义的ppx。在链接的编译器模块中,Cmd_ppx_apply.apply_rewriters将应用带有-ppx标志传递的所有参数,而Ppx_entry.rewrite_implementation是ReasonReact ppx。

假设是真的,可以有一个ppx检查文件顶部的@@custom.jsx之类的顶层语句,该ppx会检查该语句。 ReasonReact ppx used to have a similar check(如果用作参考)。

然后,如果找到此语句,则自定义ppx将处理具有@JSX属性的节点,并确保从其中删除了这些属性,因此,当编译器将AST传递给ReasonReact ppx时,它将不会看不到他们。

请注意,如果ReScript ppx管道有一天被更新为基于驱动程序的管道(这不太可能,因为这意味着ReScript应该以某种方式支持本地库作为一等公民),否则这将中断。上述更改(ReasonReact ppx适用于用户定义的更改)。

本文链接:https://www.f2er.com/1650890.html

大家都在问