有没有办法在 ReasonReact 项目的某些文件中禁用 react-jsx 转换?
我认为可以通过不添加和添加到要进行 react-jsx 转换的文件的顶部"reason": { "react-jsx": 3 }
来实现另一种方式,但这将迫使我在太多文件中添加此注释。bsconfig.json
@@bs.config({jsx: 3})
我想在几个文件中构建一个基于 JSX 的小型 DSL,同时在我的项目的其余部分中受益于 React。
有没有办法在 ReasonReact 项目的某些文件中禁用 react-jsx 转换?
我认为可以通过不添加和添加到要进行 react-jsx 转换的文件的顶部"reason": { "react-jsx": 3 }
来实现另一种方式,但这将迫使我在太多文件中添加此注释。bsconfig.json
@@bs.config({jsx: 3})
我想在几个文件中构建一个基于 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 在用户定义的之前应用)。