禁用ReasonReact项目中每个文件的react jsx



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

我认为另一种方法是可能的,即不将"reason": { "react-jsx": 3 }添加到bsconfig.json,并将@@bs.config({jsx: 3})添加到您想要反应jsx转换的文件的顶部,但这会迫使我在太多文件中添加此注释。

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

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

如果我正确阅读了编译器代码,那么在ReasonReact ppx之前会应用用户定义的ppx。在链接的编译器模块中,Cmd_ppx_apply.apply_rewriters将应用带有-ppx标志的所有参数,而Ppx_entry.rewrite_implementation是ReasonReact ppx。

假设这是真的,那么可以有一个ppx来检查文件顶部的顶级语句,比如@@custom.jsx,ppx会检查它。ReasonReact ppx过去也有类似的检查,以备参考。

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

请注意,如果ReScript ppx管道有一天更新为基于驱动程序的管道(我认为这不太可能,因为这意味着ReScript应该以某种方式支持原生库作为一级公民(,或者如果上面提到的顺序发生了变化(ReasonReact ppx在用户定义的管道之前适用(,这将中断。

相关内容

  • 没有找到相关文章

最新更新