# 从 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 export
的Mpx
对象不再挂载createComponent/createStore
等运行时方法,一律通过named export
提供,Mpx
对象上仅保留set/use
等全局 API; - 使用 I18n 能力时,为了与新版 vue-i18n 保持对齐,
this.$i18n
对象指向全局作用域,如需创建局部作用域需要使用组合式 APIuseI18n
的方式进行创建。 watch
API 不再接受第二个参数为带有handler
属性的对象形式(该参数形式只应存在于watch
option 中),第二个参数必须为回调函数,与 Vue (opens new window) 对齐。