跳到主要内容
版本:1.0.0

MorJS 介绍

MorJS 是什么?

Mor (发音为 /mɔːr/,类似 more) 是饿了么开发的一款基于小程序 DSL 的,可扩展的多端研发框架。使用小程序原生 DSL 构建,使用者只需书写一套(微信或支付宝)小程序,就可以通过 MorJS 的转端编译能力,将源码分别编译出可以在不同端(微信/支付宝/百度/字节/钉钉/快手/QQ/淘宝/Web…)运行的产物。

MorJS 以多端编译为基础,配以面向全生命周期的插件体系,覆盖从源码到构建产物的每个阶段,支持各类功能扩展和业务需求,无论是基础的页面和组件还是复杂的分包和插件,MorJS 都可以胜任,帮助你高效地开发多端小程序。

优势与核心能力

MorJS 是一套基于小程序 DSL (支付宝或微信) 的框架。他的易用性、标准化和灵活性,使得开发者能更好地专注于业务,让开发成本,招聘、管理、测试各方面成本都大幅下降,提高开发者的工作效率。

  • ⭐️ 易用性
    • 💎 DSL 支持:可使用微信小程序 DSL 或 支付宝小程序 DSL 编写小程序,无额外使用成本;
    • 🌴 多端支持:支持将一套小程序转换为各类小程序平台及 Web 应用, 节省双倍人力;
    • 🚀 快速接入:仅需引入两个包,增加一个配置文件,即可简单快速接入到现有小程序项目;
  • 🌟 标准化
    • 📦 开箱即用:内置了脚手架、构建、分析、多端编译等完整研发能力,仅需一个依赖即可上手开发;
    • 🌈 表现一致:通过编译时+运行时抹平多端差异性,让不同平台的小程序获得一致的用户体验;
    • 🖇 形态转换:支持同一个项目的不同的形态,允许小程序、分包、插件不同形态之间的相互转换;
  • 灵活性
    • 🎉 方便扩展:MorJS 将完备的生命周期和内部功能插件化,使用插件(集)以满足功能和垂直域的分层需求;
    • 📚 类型支持:除小程序标准文件类型外,还支持 ts、less/scss、jsonc/json5 等多种文件类型;
    • 🧰 按需适配:可根据需求选择性接入适配能力,小项目仅需编译功能,中等项目可结合编译和页面注入能力,大型项目推荐使用复杂小程序集成能力;

MorJS 的由来

继 2017 年小程序诞生以来,由于其独特的商业模式和轻应用的用户体验,在移动社交电商等领域不断取得亮眼成绩。目前各大平台都相继推出了自己的小程序,饿了么 C 端业务需要在不同平台小程序进行投放,这些项目大多是以支付宝或微信原生 DSL 编写,面对业务渠道的不断增加,我们尝试了多种方法来兼容多端适配,但由于不同平台间小程序代码写法、能力支持的差异性逐步变大,过去的方案无法满足新业务的需求,我们需要一套跨端研发框架能解决以下诉求:

  • 原生 DSL 支持,方便现有小程序 DSL 编写的存量业务使用;
  • 降低性能开销,尽可能轻运行时,减少编译构建的时长;
  • 便捷的使用,一键转换为支持各小程序平台使用的产物;
  • 拓展的功能,提供针对大型复杂小程序的解耦方案;
  • 灵活的配置,能够简单的增加修改多套不同端的项目配置;
  • 产物优化能力,压缩构建产物体积,减少小程序包大小;

在明确这几点后,我们调研了业界所有主流技术框架,发现并没有能完全满足我们需求的方案,所以我们决定自研 MorJS。

什么时候不用 MorJS

如你所见,MorJS 是一套基于小程序 DSL (支付宝、微信) 的框架,如果你,

  • 期望使用 React 或 Vue 的方式来编写小程序
  • 期望使用 Web 的方式开发
  • 有很强的 webpack 自定义需求和主观意愿
  • 需要以 微信小程序或支付宝小程序 DSL 以外的方式开发
  • 需要跑在 Node 14 以下的环境中

MorJS 可能不适合你。

项目使用情况

截止目前,MorJS 支持 3 种编译形态(小程序、小程序插件、小程序分包),并支持 9 个目标平台的转换(微信、支付宝、百度、字节、快手、钉钉、手淘、QQ、Web),未来还将进一步扩展平台支持(如 鸿蒙、快应用等),支撑了饿了么 C 端多数业务在全渠道上的研发和投放。我们期望能把其中的技术细节、架构设计和技术思考呈现给大家,未来结合开源社区的共建和使用场景的扩展,来促进 Mor 框架能力进一步提升,以更好的为所有的小程序开发者服务。

MorJS 社区服务群

如果在使用 MorJS 中遇到问题,钉钉扫码或搜索群号「29445021084」即可加入 👇