什么是芋头?
Taro是由JD-Bump Labs创建的一套遵循React语法规范的多终端统一开发框架。
如今,市场上有各种类型的终端。 H5、App(React Native),微信小程序和其他终端很受欢迎。当业务需求需要不同端的性能时编写多组代码的成本显然非常高。目前,非常需要仅使用一组代码即可适应多个目标的能力。
使用Taro,我们只能编写一组代码,并使用Taro的编译工具将源代码编译为可以在不同端(微信小程序,H5、App,fast app等)运行的代码。 )。同时,芋头还提供了现成的语法检测和自动完成功能,有效地提高了开发经验和开发效率。
芋头能提供什么?
写入一次,在多个终端上运行
由于它是一个多终端解决方案,所以Taro的最重要的能力当然是编写一组可以由多个终端运行的代码。目前,Taro支持一组代码以同时生成H5和微信小程序。 App(React Native)也将很快得到支持,并且不久的将来还将支持快速应用程序之类的终端。
同时,芋头也已经在生产环境中投入使用。目前,它已支持30,000行代码小程序 TOPLIFE的开发,以及一些京东购物小程序和Yiyou Bureau 小程序的开发。将来还将提供更多支持。许多京东核心业务小程序。
现代前端开发流程
与微信随附的小程序框架不同,Taro积极拥抱社区中现有的现代开发流程,包括但不限于:
NPM软件包管理系统ES6 +的语法免费资源参考CSS预处理程序和后处理程序(SCSS,Less,PostCSS)
对于微信小程序的编译过程,我们从Parcel那里得到了启发,并开发了一套打包机制来连续交付AST,因此代码分析速度得到了极大的提高。 2015年的15英寸RMBP只需花费15秒即可编译数百个组件。
API和组件化系统与React完全相同
在Taro中,您不必区分什么是App组件,什么是Page组件以及什么是Component组件,例如小程序。 Taro是所有Component组件,React的生命周期完全相同。可以说,一旦掌握了React,就几乎掌握了Taro。学习React的资源几乎已满,因此无需担心学习它。
与React一样,芋头也使用声明性JSX语法。与字符串的模板语法相比,JSX在处理微妙和复杂的需求时更方便。
//典型的Taro组件导入Taro,'@ tarojs / taro'中的{Component}导入,'@ tarojs / components'export中的{View,Button}导出defaultclass Home扩展了组件{constructor(props){super(props) this.state = {title:'Home',list:[1、2、3]}} componentWillMount(){} componentDidMount(){} componentWillUpdate(nextProps,nextState){} componentDidUpdate(prevProps,prevState){} shouldcomponentUpdate( nextProps,nextState){returntrue} add =(e)=> {// dosth} render(){const {list,title} = this.statereturn({title} {list.map(item => {return({item })})}添加)}}良好的开发效率和经验
由于Taro的语法与React完全相同,因此编辑器/ IDE可以支持Taro与React几乎相同。现代编辑器默认都支持JSX。如果没有,那么找到插件非常容易。但毕竟,我们是为了提高开发效率和开发经验而使用Taro的,真正使用Taro的人就是我们自己或坐在我们旁边的同事。因此,在此基础上,我们进一步增强了芋头的开发经验。
自定义ESLint规则
我们之前提到过,当您学习React时,您几乎会认识Taro。最重要的原因之一是我们针对Taro不支持的语法和功能分别编写了ESLint规则:开发人员仅编写代码,而编辑器在写入不受支持的语法/功能时将报告错误,并且提供错误消息和文档地址。描述。
类型安全和运行时检测
JSX的本质是JavaScript的语法增强,因此在编译时找不到诸如导入组件之类的语法错误。开发人员还可以使用TypeScript或Flow来进一步增强代码的可靠性,或者使用PropsType来进一步确保代码在运行时的鲁棒性。
高效的自动补全和ES6 +语法
所有Taro API(包括微信小程序和其他具有终端功能的接口)都具有智能提醒和自动完成功能,包括接口参数和返回值。
芋头的设计思想
我们的初衷是提出一种可以适应多个终端的解决方案。结合业务方案,技术选择和前端历史发展过程,我们的解决方案必须满足以下要求:
多终端重用代码,不仅可以在最流行的H5、微信小程序,APP(React Native)上运行,而且还为其他流行的终端留出了空间和可能性。完整而强大的组件化机制,这是开发复杂应用程序的基石,它与当前的团队技术堆栈有机地结合在一起,有效地提高了效率,并为低廉的学习成本提供了生态学
同时满足这些要求并不容易。经过深入的调查和思考,我们发现只有React系统才能满足我们的需求。对于微信小程序,绝对没有办法使用React-进行开发,直到我们从codemod那里得到启发:
在一个优秀而严格的规范下,从更高的抽象角度(语法树)来看,每个人都编写相同的代码。
也就是说,对于不是开放源代码的微信小程序,我们可以先将React代码分析成抽象语法树,然后基于该树生成小程序支持的模板代码,然后小程序]运行时框架处理事件和生命周期与小程序框架兼容,然后在运行时框架中运行业务代码以完成小程序端的适配。
对于React已经支持的终端,例如Web,React Native甚至将来的React VR,我们只需要打包一层组件库并提供一些样式支持。鉴于小程序的流行以及我们团队自身的业务重点,组件库的API基于小程序,其他组件库的API将与小程序端的组件保持一致。
技术选择和权衡
在我们面前的社区中,有许多优秀的框架以小程序为核心,探索了多末端适应。我们比较了每个开发框架的主要特征和特点,并制作了图表。您可以根据团队的技术堆栈,技术要求以及框架的特征和功能进行选择和权衡。
结论
经过几个月的发展,Taro已从最初的承诺发展成为一个大型项目,涉及16个软件包和十几名学生。同时,芋头还支持在生产环境中开发多个复杂的业务在线项目,并将在将来支持更多的JD业务。
Taro的技术解决方案和实施也植根于社区,我们也希望为技术社区的发展和成长贡献自己的力量。秉承JD O2 Lab开源,开放和共享的优良传统,今天我们开放所有Taro代码的源代码,为开发人员提供一套技术解决方案,以快速开发多终端项目。将来,我们将继续扩展Taro的现有功能,支持更多最终功能,继续改善开发人员体验,提高开发人员效率并帮助更多开发人员;同时,我们还将从社区中汲取营养,以使芋头变得更强壮。
芋头官方网站:
GitHub源代码:
如果您还没有听说过Nerv,可以在这里查看: