peakchen90 / babel-plugin-react-directives

A babel plugin that provides some directives for react(JSX), similar to directives of vue.
https://peakchen90.github.io/babel-plugin-react-directives
MIT License
96 stars 13 forks source link

强烈建议增加对 jsx-runtime 的外部支持 #35

Closed yinran100 closed 1 year ago

yinran100 commented 1 year ago

最近开发组件库打包时发现,开发时jsx转换是用babel插件转换的,功能开发没有问题。 但是由于现在react17开始,react的jsx语法打包时是通过react/jsx-runtime来转换新的JSX转换方式——React 官方博客翻译,导致打包后的代码,并没有转换x-指令,通过翻阅资料和查看源码,本插件过渡依赖@babel/plugin-transform-react-jsx,可以多增加一个包来处理这样的场景。

可参考:通过 jsx-runtime 实现自动使用 classnames / clsx

yinran100 commented 1 year ago

目前临时解决方案就是 : 构建时把 tsconfig.json 里的"jsx": "react-jsx"注释掉

peakchen90 commented 1 year ago

目前临时解决方案就是 : 构建时把 tsconfig.json 里的"jsx": "react-jsx"注释掉

@yinran100 根据您提供的信息,看起来是跟 plugin-transform-react-jsx 插件没有关系,而且 jsx 语法被 ts 编译掉了。但是 babel-plugin-react-directives 插件转换 x-* 属性是基于 jsx 语法来转换的,所以一定要保留 jsx 语法。

通常来说,我们会在 tsconfig.json 里配置 "jsx": "preserve",表示 ts 仅识别语法,不做转换,交给 babel 去转换 jsx 语法。

peakchen90 commented 1 year ago

刚刚看了一下,并不会依赖 @babel/plugin-transform-react-jsx,而是依赖 @babel/plugin-syntax-jsx,也是表示在babel中仅识别 jsx 语法,而不做转换。转换交由项目中配置的其他 babel 配置处理,比如使用 @babel/preset-react 预设

yinran100 commented 1 year ago

刚刚看了一下,并不会依赖 @babel/plugin-transform-react-jsx,而是依赖 @babel/plugin-syntax-jsx,也是表示在babel中仅识别 jsx 语法,而不做转换。转换交由项目中配置的其他 babel 配置处理,比如使用 @babel/preset-react 预设

靠谱,感谢