MCPcopy
hub / github.com/didi/mpx

github.com/didi/mpx @v2.10.24 sqlite

repository ↗ · DeepWiki ↗ · release v2.10.24 ↗
4,110 symbols 16,958 edges 818 files 91 documented · 2%
README

mpx-logo

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

test-status docs-status

官网及文档

欢迎访问https://mpxjs.cn,跟随我们提供的文档指南使用Mpx进行跨端小程序开发。

近期更新

基于 Mpx 的移动端基础组件库 mpx-cube-ui 已经开源,更多详情查看这里

Mpx 2.9 版本正式发布,支持原子类、SSR和构建产物体积优化,更多详情查看这里,迁移指南查看这里,相关指南及 API 参考文档已更新。

简介

Mpx是一款致力于提升小程序开发体验和用户体验的增强型小程序跨端框架,通过Mpx,我们能够以类Vue的开发体验高效优雅地构筑出高性能跨端小程序应用,在所有开放的小程序平台及web平台中运行。

Mpx具有以下功能特性: * 数据响应 (赋值响应 / watch / computed) * 组合式 API * 增强模板语法 (动态组件 / 样式绑定 / 类名绑定 / 内联事件函数 / 双向绑定 / refs) * 极致性能 (运行时性能优化 / 包体积优化 / 框架运行时体积14KB) * 高效强大的编译构建 (基于webpack5 / 支持持久化缓存 / 兼容webpack生态 / 兼容原生小程序 / 完善支持npm场景下的分包输出 / 高效调试) * 单文件组件开发 * 渐进接入 / 原生组件支持 * 状态管理 (Vuex规范 / 支持多实例Store) * 跨团队开发 (packages) * 逻辑复用 (mixins) * 周边能力 (fetch / api增强 / mock / webview-bridge) * 脚手架支持 * 多平台增强 (支持在微信、支付宝、百度、qq、头条小程序平台中进行增强开发) * 跨平台编译 (一套代码跨端输出到微信、支付宝、百度、字节、QQ、京东、快应用(web) 和 web平台 中运行) * TypeScript支持 (基于ThisType实现了完善的类型推导) * I18n国际化 * 单元测试 * E2E测试 * 原子类 * SSR * 运行时渲染方案 * 跨端输出RN(即将到来)

快速开始

# 安装mpx脚手架工具
npm i -g @mpxjs/cli

# 初始化项目
mpx create mpx-project

# 进入项目目录
cd mpx-project

# 安装依赖
npm i

# development
npm run serve

# production
npm run build

使用小程序开发者工具打开项目文件夹下dist中对应平台的文件夹即可预览效果。

使用示例

<template>

  <view class="container" wx:style="{{dynamicStyle}}">

    <view class="title">{{title}}</view>

    <view class="title">{{reversedTitle}}</view>
    <view class="list">

      <view wx:for="{{list}}" wx:key="id" class="list-item" wx:class="{{ {active:item.active} }}"
            bindtap="handleTap(index)">
        <view>{{item.content}}</view>

        <input type="text" wx:model="{{list[index].content}}"/>
      </view>
    </view>

    <custom-input wx:ref="ci" wx:model="{{customInfo}}" wx:model-prop="info" wx:model-event="change"/>

    <component is="{{current}}"></component>

    <view class="bottom" wx:show="{{showBottom}}">

      <view wx:if="{{__mpx_mode__ === 'wx'}}">wx env</view>
      <view wx:if="{{__mpx_mode__ === 'ali'}}">ali env</view>
    </view>
  </view>
</template>

<script>
  import { createPage } from '@mpxjs/core'

  createPage({
    data: {
      // 动态样式和类名也可以使用computed返回
      dynamicStyle: {
        fontSize: '16px',
        color: 'red'
      },
      title: 'hello world',
      list: [
        {
          content: '全军出击',
          id: 0,
          active: false
        },
        {
          content: '猥琐发育,别浪',
          id: 1,
          active: false
        }
      ],
      customInfo: {
        title: 'test',
        content: 'test content'
      },
      current: 'com-a',
      showBottom: false
    },
    computed: {
      reversedTitle () {
        return this.title.split('').reverse().join('')
      }
    },
    watch: {
      title: {
        handler (val, oldVal) {
          console.log(val, oldVal)
        },
        immediate: true
      }
    },
    handleTap (index) {
      // 处理函数直接通过参数获取当前点击的index,清晰简洁.
      this.list[index].active = !this.list[index].active
    },
    onReady () {
      setTimeout(() => {
        // 更新数据,同时关联的计算属性reversedTitle也会更新
        this.title = '你好,世界'
        // 此时动态组件会从com-a切换为com-b
        this.current = 'com-b'
      }, 1000)
    }
  })
</script>

<script type="application/json">
  {
    "usingComponents": {
      "custom-input": "../components/custom-input",
      "com-a": "../components/com-a",
      "com-b": "../components/com-b"
    }
  }
</script>

<style lang="stylus">
  .container
    position absolute
    width 100%
</style>

更多示例请查看官方示例项目

设计思路

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

生态周边

包名 版本 描述
@mpxjs/core npm version mpx运行时核心
@mpxjs/webpack-plugin npm version mpx编译核心
@mpxjs/api-proxy npm version 将各个平台的 api 进行转换,也可以将 api 转为 promise 格式
@mpxjs/store npm version 类vuex store
@mpxjs/pinia npm version mpx pinia store
@mpxjs/fetch npm version mpx网络请求库,处理wx并发请求限制
@mpxjs/unocss-plugin npm version mpx unocss插件,支持使用unocss原子类
@mpxjs/unocss-base npm version mpx unocss预设
@mpxjs/cli npm version mpx脚手架命令行工具
@mpxjs/webview-bridge npm version 为跨小程序平台的H5项目提供通用的webview-bridge
@mpxjs/utils npm version mpx运行时工具库
@mpxjs/babel-plugin-inject-page-events npm version 组合式API页面事件处理插件
@mpxjs/mpx-cube-ui npm version 基于 Mpx 的移动端基础组件库

开发团队

核心团队: hiyuki, Blackgan3, anotherso1a, CommanderXL, yandadaFreedom, wangxiaokou, OnlyProbie, pagnkelly, thuman, theniceangel, dolymood

外部贡献者:sky-admin, pkingwa, httpsxiao, lsycxyj, okxiaoliang4, tangminFE, codepan, zqjimlove, xuehebinglan, zhaoyiming0803, ctxrr, JanssenZhang, heiye9, lj0812, SuperHuangXu, twtylkmrh, NineSwordsMonster

成功案例

微信小程序

滴滴出行 出行广场 滴滴公交 滴滴金融 滴滴外卖 司机招募 小桔加油
滴滴出行 出行广场 滴滴公交 滴滴金融 滴滴外卖 司机招募 小桔加油
彗星英语 番薯借阅 疫查查应用 小桔养车 学而思直播课 小猴启蒙课 科创书店
彗星英语 番薯借阅 疫查查应用 小桔养车 学而思直播课 小猴启蒙课 科创书店
在武院 三股绳Lite 学而思优选课 食享会 青铜安全医生 青铜安全培训 视穹云机械
在武院 三股绳Lite 学而思优选课 食享会 青铜安全医生 青铜安全培训 视穹云机械
店有生意通 花小猪打车 橙心优选 小二押镖 顺鑫官方微商城 嘀嗒出行 汉行通Pro
店有生意通 花小猪打车 橙心优选 小二押镖

Extension points exported contracts — how you extend this code

EffectScope (Interface)
(no doc) [2 implementers]
packages/core/@types/index.d.ts
PickerViewProps (Interface)
* ✔ value * ✔ bindchange * ✘ bindpickstart * ✘ bindpickend * ✔ mask-class * ✔ indicator-style: 优先级indicator-style.h
packages/webpack-plugin/lib/runtime/components/react/mpx-picker-view/index.tsx
Pinia (Interface)
(no doc) [1 implementers]
packages/pinia/@types/index.d.ts
CancelTokenClass (Interface)
(no doc)
packages/fetch/@types/index.d.ts
compContext (Interface)
(no doc)
packages/store/@types/index.d.ts
AggResult (Interface)
(no doc)
packages/perf/src/types.ts
GetLocationInterface (Interface)
(no doc)
packages/api-proxy/@types/index.d.ts
ListItem (Interface)
(no doc)
legacy/mock/@types/index.d.ts

Core symbols most depended-on inside this repo

n
called by 8440
packages/size-report/public/umi.52696c6f.js
push
called by 2133
packages/utils/src/path.js
get
called by 2109
packages/api-proxy/src/platform/api/create-intersection-observer/IntersectionObserver.js
r
called by 1424
packages/size-report/public/umi.52696c6f.js
forEach
called by 1201
packages/fetch/src/interceptorManager.js
a
called by 1038
packages/size-report/public/umi.52696c6f.js
i
called by 972
packages/size-report/public/umi.52696c6f.js
o
called by 946
packages/size-report/public/umi.52696c6f.js

Shape

Function 3,095
Method 613
Class 212
Interface 186
Enum 4

Languages

TypeScript100%
Python1%

Modules by API surface

packages/size-report/public/umi.52696c6f.js713 symbols
packages/webpack-plugin/lib/template-compiler/compiler.js138 symbols
packages/webpack-plugin/lib/runtime/components/react/utils.tsx61 symbols
packages/core/src/core/proxy.js49 symbols
packages/webpack-plugin/lib/index.js43 symbols
packages/core/@types/index.d.ts42 symbols
packages/webpack-plugin/lib/wxss/utils.js40 symbols
packages/api-proxy/src/platform/api/animation/animation.ios.js37 symbols
packages/webpack-plugin/lib/script-setup-compiler/index.js36 symbols
packages/core/src/dynamic/vnode/css-select/cssauron.js36 symbols
packages/api-proxy/src/platform/api/animation/animation.js35 symbols
packages/store/@types/index.d.ts32 symbols

Dependencies from manifests, versioned

@ampproject/remapping2.2.1 · 1×
@babel/code-frame7.16.0 · 1×
@babel/core7.25.2 · 1×
@babel/eslint-parser7.18.9 · 1×
@babel/generator7.16.0 · 1×
@babel/parser7.16.2 · 1×
@babel/plugin-syntax-typescript7.16.7 · 1×
@babel/plugin-transform-runtime7.10.4 · 1×
@babel/plugin-transform-typescript7.16.1 · 1×
@babel/preset-env7.25.3 · 1×
@babel/preset-typescript7.29.7 · 1×
@babel/runtime-corejs37.10.4 · 1×

For agents

$ claude mcp add mpx \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact