大家好,很高兴又见面了,我是前端进阶,由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发! Mitosis:单组件编译成Vue、React、Solid、Angular、Svelte等框架代码的利器1。什么是Mitosis? Mitosis是一个编译时框架,允许您在JSX中编写组件并编译为vanillaJavaScript、Angular、React、Vue等。 Mitosis使用JSX的静态子集,灵感来自Solid。这意味着可以将其解析为简单的JSON结构,然后构建为针对各种框架的序列化程序。 Mitosis可能与Ionic团队使用Stencil所做的工作非常相似。一个主要区别是Mitosis不只是输出组件,而且可以编译成各个框架代码,甚至可以编译为Stencil。 截至2022年4月,Builder。io的Mitosis支持包括几乎所有主流框架代码:VueReactAngularSvelteReactNativeSwiftSolidJsStencilWebComponentsHTMLLiquidTemplateLiteralsJSONBuilder(JSON)2。Mitosis与其他编译时框架相比如何? 两个非常流行的编译时框架是Svelte和SolidJS。Mitosis与其非常相似,因为它也是一个编译时框架,而且非常快。它的不同之处在于允许生成多个框架,从而实现最大的灵活性。 SolidJS:用于构建用户界面的简单且高效的响应式框架 与SolidJS类似,Mitosis使用将组件编译为JSON的JSX版本。然后插件将组件编译到不同的目标,使您能够在两个过程中创建工具:可以转换成JSON的代码将JSON编译或序列化为目标框架的插件3。为什么使用Mitosis? Mitosis是一种非常强大和灵活的工具。到目前为止,已经确定三大典型场景可以从中受益。3。1设计系统维护者 如果您是从一个Web框架开始的设计系统库的维护者,那么在为后续框架创建新版本时,您会感受到巨大的维护痛苦和重复劳动。3。2使用多个Web框架的团队 如果您所在的团队使用了多个不同的Web前端框架,那么在所有前端之间协调设计系统以获得好的开发体验绝对是一场噩梦。Mitosis是消除此类问题的出色工具,因为它允许您在组件中定义一次设计并将它们部署到所有单独的前端框架。3。3构建WebSDK的团队 如果您的团队正在为直接集成到Web框架并涉及向最终用户提供组件的产品构建SDK,那么Mitosis非常适合您的团队。 4。如何使用Mitosis4。1如何安装CLI 打开终端并执行以下命令来安装CLI:npminstallgbuilder。iomitosiscli 可以运行mitosishelp,命令将展示具体用法和示例。USAGEmitosiscompiletoformat〔options〕〔files〕mitosiscompiletformat〔options〕〔files〕Ifno〔inputfiles〕arespecifiedorwhen〔files〕is,inputisreadfromstandardinput。EXAMPLESmitosiscompiletreactcomponent。tsxmitosiscompiletreactcomponent。tsxcatcomponent。tsxmitosiscompilethtmlmitosiscompiletreactoutdirbuildsrc。tsx 记住Mitosis只是编译器,仍然需要创建代表组件的JSX文件,然后Mitosis将输出这些文件。4。2如何创建Mitosis项目 首先创建一个新目录并切换:mkdirmitosisexamplecdmitosisexample 创建一个npm项目,以便使用builder。iomitosis包:npminity 强烈建议使用git初始化此目录:gitinit 将Builder。ioMitosis包安装到本地项目中:npminstallbuilder。iomitosis添加JSXMitosis文件 文件名应以lite。jsx结尾touchcomponent。lite。jsx 在VSCode中打开项目:code。 项目在VSCode中有如下结构: 将JSX添加到component。lite。jsx文件中:import{useState}frombuilder。iomitosis;exportdefaultfunctionMyComponent(props){const〔name,setName〕useState(Alex);return(inputcss{{color:red,}}value{name}onChange{(event)setName(event。target。value)}Hello!IcanruninReact,Vue,Solid,orLiquid!);}状态比较 在将component。lite。jsx输出为其他语言之前,请仔细查看状态的使用方式。useState钩子与您在React中的使用方式相同。您可以在下面看到一些框架以及它们如何使用此定义为每个输入适当地分配状态变量。inputcss{{color:red,}}value{name}onChange{(event)setName(event。target。value)} 在JSX中使用的状态变量名称在下面的其他框架中已正确编译。Angularinputclassinput〔value〕name(input)nameevent。target。valueSvelteinputclassinputbind:value{name}Vueinputclassinput:valuenameinputnameevent。target。value 5。总结 本文主要和大家介绍下一个优秀的编译时框架Mitosis。因为笔者也没有在生产项目中使用、部署过Mitosis,所以很多探索也就浅尝辄止,但是文末的参考资料提供了大量优秀文档以供学习,如果有兴趣可以自行阅读。 参考资料 https:github。comBuilderIOmitosis https:www。builder。ioblogmitosisaquickguide https:solid。redwoodjs。cn