# 从 2.7 升级至 2.8

不同于 2.7 版本对于编译构建进行的大幅度变动升级,Mpx@2.8 版本升级的核心在于运行时支持组合式 API 能力,并尽可能追求向前兼容,以降低用户的升级成本。我们默认脚手架生成的全新项目已经适配了 2.8 版本的全部变更,如果你需要将旧项目从 2.7 升级至 2.8 版本,下面是详细的升级指引。

# 依赖升级

请按照下方列表升级或新增相关依赖:

{
  "dependencies": {
    "@mpxjs/api-proxy": "^2.8.0",
    "@mpxjs/core": "^2.8.0",
    "@mpxjs/store": "^2.8.0",
    "@mpxjs/pinia": "^2.8.0",
    "@mpxjs/utils": "^2.8.0",
    "@mpxjs/fetch": "^2.8.0",
    // 这部分依赖为输出 web 专用,如项目无需输出 web 可以省略
    "vue": "^2.7.10",
    "vue-demi": "^0.13.11",
    "vue-i18n": "^8.27.2",
    "vue-i18n-bridge": "^9.2.2"
  },
  "devDependencies": {
    "@mpxjs/webpack-plugin": "^2.8.0",
    "@mpxjs/size-report": "^2.8.0",
    "@mpxjs/babel-plugin-inject-page-events": "^2.8.0",
    // ...
  }
}

# 编译配置变更

在编译配置方面,用户几乎不用进行任何改变,唯一的例外是当用户想要通过组合式 API 的方式注册具有副作用的页面事件时,需要在 babel 配置中添加 @mpxjs/babel-plugin-inject-page-events 插件,如下所示:

// babel.config.json
{
 "plugins": [
    [
      "@babel/transform-runtime",
      {
        "corejs": 3,
        "version": "^7.10.4"
      }
    ],
    "@mpxjs/babel-plugin-inject-page-events"
  ]
}

关于副作用页面事件的更多详情查看这里

# 运行时破坏性变化

在 2.8 开发过程中,我们修正了过去版本中存在的不合理的设计与实现,在运行时带来了少许破坏性改变,详情如下:

  • 框架过往提供的组件增强生命周期 pageShow/pageHide 与微信原生提供的 pageLifetimes.show/hide 完全对齐,不再提供组件初始挂载时必定执行 pageShow 的保障(因为组件可能在后台页面进行挂载),相关初始化逻辑一定不要放置在 pageShow 当中;
  • 取消了框架过去提供的基于内部生命周期实现的非标准增强生命周期,如 beforeCreate/onBeforeCreate 等,直接将内部生命周期变量导出提供给用户使用,详情查看这里
  • 为了优化 tree shaking,作为框架运行时 default exportMpx 对象不再挂载 createComponent/createStore 等运行时方法,一律通过 named export 提供,Mpx 对象上仅保留 set/use 等全局 API;
  • 使用 I18n 能力时,为了与新版 vue-i18n 保持对齐,this.$i18n 对象指向全局作用域,如需创建局部作用域需要使用组合式 API useI18n 的方式进行创建。
  • watch API 不再接受第二个参数为带有 handler 属性的对象形式(该参数形式只应存在于 watch option 中),第二个参数必须为回调函数,与 Vue (opens new window) 对齐。