一款具有优秀开发体验和深度性能优化的增强型小程序开发框架。

Mpx是一款致力于提高小程序开发体验和开发效率的增强型小程序框架,通过Mpx,我们能够高效优雅地开发出具有极致性能的优质小程序应用,并将其输出到各大小程序平台和web平台中运行。

Mpx具有以下功能特性:

  • 数据响应 (赋值响应 / watch / )
  • 增强模板语法 (动态组件 / / 内联事件函数 / / refs)
  • 极致性能 ( / 包体积优化 / 框架运行时体积14KB)
  • (基于webpack / 兼容webpack生态 / 兼容原生小程序 / 完善支持npm场景下的分包输出 / 高效调试)
  • 单文件组件开发
  • 状态管理 (Vuex规范 / 支持多实例Store)
  • 跨团队开发 ()
  • 逻辑复用 (mixins)
  • (fetch / api增强 / mock / webview-bridge)
  • 脚手架支持
  • 多平台增强 (支持在微信、支付宝、百度、qq、头条小程序平台中进行增强开发)
  • (支持以微信为base,将一套代码转换输出到支付宝、百度、qq、头条小程序平台和web平台中运行)
  • (基于ThisType实现了完善的类型推导)
  • I18n国际化
  • 单元测试支持 (即将到来)
  • 快应用输出 (即将到来)

安装使用

  1. <!--动态样式-->
  2. <view class="container" wx:style="{{dynamicStyle}}">
  3. <!--数据绑定-->
  4. <view class="title">{{title}}</view>
  5. <!--计算属性数据绑定-->
  6. <view class="title">{{reversedTitle}}</view>
  7. <view class="list">
  8. <!--循环渲染,动态类名,事件处理内联传参-->
  9. <view wx:for="{{list}}" wx:key="id" class="list-item" wx:class="{{ {active:item.active} }}"
  10. bindtap="handleTap(index)">
  11. <view>{{item.content}}</view>
  12. <!--循环内部双向数据绑定-->
  13. <input type="text" wx:model="{{list[index].content}}"/>
  14. </view>
  15. </view>
  16. <!--自定义组件获取实例,双向绑定,自定义双向绑定属性及事件-->
  17. <!--动态组件,is传入组件名字符串,可使用的组件需要在json中注册,全局注册也生效-->
  18. <component is="{{current}}"></component>
  19. <!--显示/隐藏dom-->
  20. <view class="bottom" wx:show="{{showBottom}}">
  21. <!--模板条件编译,__mpx_mode__为框架注入的环境变量,条件判断为false的模板不会生成到dist-->
  22. <view wx:if="{{__mpx_mode__ === 'wx'}}">wx env</view>
  23. <view wx:if="{{__mpx_mode__ === 'ali'}}">ali env</view>
  24. </view>
  25. </view>
  26. </template>
  27. <script>
  28. import { createPage } from '@mpxjs/core'
  29. createPage({
  30. data: {
  31. dynamicStyle: {
  32. fontSize: '16px',
  33. color: 'red'
  34. },
  35. title: 'hello world',
  36. list: [
  37. {
  38. content: '全军出击',
  39. id: 0,
  40. active: false
  41. },
  42. {
  43. content: '猥琐发育,别浪',
  44. id: 1,
  45. active: false
  46. }
  47. ],
  48. customInfo: {
  49. title: 'test',
  50. content: 'test content'
  51. },
  52. current: 'com-a',
  53. showBottom: false
  54. },
  55. computed: {
  56. reversedTitle () {
  57. }
  58. },
  59. watch: {
  60. title: {
  61. handler (val, oldVal) {
  62. console.log(val, oldVal)
  63. immediate: true
  64. }
  65. },
  66. handleTap (index) {
  67. // 处理函数直接通过参数获取当前点击的index,清晰简洁
  68. this.list[index].active = !this.list[index].active
  69. },
  70. onReady () {
  71. setTimeout(() => {
  72. // 更新数据,同时关联的计算属性reversedTitle也会更新
  73. this.title = '你好,世界'
  74. // 此时动态组件会从com-a切换为com-b
  75. this.current = 'com-b'
  76. }, 1000)
  77. }
  78. })
  79. </script>
  80. <script type="application/json">
  81. {
  82. "usingComponents": {
  83. "custom-input": "../components/custom-input",
  84. "com-a": "../components/com-a",
  85. "com-b": "../components/com-b"
  86. }
  87. }
  88. </script>
  89. <style lang="stylus">
  90. .container
  91. position absolute
  92. width 100%
  93. </style>

更多示例请查看

设计思路

Mpx的核心设计思路为增强,不同于业内大部分小程序框架将web MVVM框架迁移到小程序中运行的做法,Mpx以小程序原生的语法和技术能力为基础,借鉴参考了主流的web技术设计对其进行了扩展与增强,并在此技术上实现了以微信增强语法为base的同构跨平台输出,该设计带来的好处如下:

  • 良好的开发体验:在方便使用框架提供的便捷特性的同时,也能享受到媲美原生开发的确定性和稳定性,完全没有的顾虑;不管是增强输出还是跨平台输出,最终的dist代码可读性极强,便于调试排查;
  • 极致的性能:得益于增强的设计思路,Mpx框架在运行时不需要做太多封装抹平转换的工作,框架的运行时部分极为轻量简洁,压缩+gzip后仅占用14KB;配合编译构建进行的包体积优化和基于模板渲染函数进行的数据依赖跟踪,Mpx框架在性能方面做到了业内最优(小程序框架运行时性能评测报告);
  • 完整的原生兼容:同样得益于增强的设计思路,Mpx框架能够完整地兼容小程序原生技术规范,并且做到实时跟进。在Mpx项目中开发者可以方便地使用业内已有的小程序生态,如组件库、统计工具等;原生开发者们可以方便地进行渐进迁移;甚至可以将框架的跨平台编译能力应用在微信的原生小程序组件当中进行跨平台输出。

成功案例

Introduction - 图1 Introduction - 图2 Introduction - 图3 Introduction - 图4 Introduction - 图5

,若你也在使用Mpx框架开发小程序,并想分享给大家,请填在此issue中。

添加MPX入群客服等待受邀入群

Mpx-wx客服

扫码进入QQ群

图片因github网络问题导致不可见的朋友可以点击该链接:https://s.didi.cn/rod

招聘

感兴趣的同学请将简历投递至,社招校招均可~