github NervJS/taro v3.1.0
chore(release): publish 3.1.0

latest releases: v4.0.7-alpha.1, v4.0.7-alpha.0, v4.0.6...
3 years ago

Breakings

一、React

项目的 React 版本必须 >= 16.14.0,或使用 17.0.0+

二、Vue2

1. 修复 Vue2 入口组件生命周期多次触发的问题,#7179

用户编写的入口组件需要修改如下:

// app.js

// 3.0
const App = new Vue({})

// 3.1
const App = {}

三、Linaria

使用 Linaria 时,需要修改 linaria.config.js 的内容。

module.exports = {
  rules: [
    {
      action: require("linaria/evaluators").shaker,
    },
    {
      // 此处的正则有改变
      test: /node_modules[\/\\](?!@tarojs)/,
      action: "ignore"
    }
  ]
}

HighLights

一、开放式架构

近年来业界推出的小程序平台越来越多,但 Taro 核心维护的平台只有 6 个,因此常常有同学提出能不能支持某某平台的 Feature Request。

基于目前的架构,支持一个新的平台开发复杂度高,同时社区也难以参与贡献。

为此我们把 Taro 打造成为一个开放式框架,通过端平台插件能支持任意小程序平台

基于开放式架构,我们新增了一些有趣的插件,也十分期待大家利用它施展创意。

新增的插件:

插件 功能
@tarojs/plugin-platform-weapp-qy 编译企业微信小程序
@tarojs/plugin-platform-alipay-dd 编译钉钉小程序
@tarojs/plugin-platform-alipay-iot 编译支付宝 IOT 小程序
@tarojs/plugin-inject 为所有小程序平台快速新增 API组件调整组件属性

二、新增小程序性能优化组件 CustomWrapper

Taro3 使用 <template> 进行渲染,所有的 setData 都由页面对象调用。如果页面结构比较复杂,更新的性能就会下降。

为此我们增加了一个基础组件 CustomWrapper,它的作用是创建一个原生自定义组件。对后代节点的 setData 将由此自定义组件进行调用,达到局部更新的效果,从而提升更新性能。

开发者可以使用 CustomWrapper 去包裹遇到更新性能问题的组件:

<CustomWrapper>
  <GoodsList>
    <Item />
    <Item />
    // ...
  </GoodsList>
</CustomWrapper>

三、原生小程序支持渐进式使用 Taro 开发

过去我们对在 Taro 项目中混合使用原生的支持度较高。相反地,对在原生项目中混合使用 Taro 却没有太重视。但是市面上有着存量的原生开发小程序,他们接入 Taro 开发的改造成本往往非常大,最后只得放弃混合开发的想法。

经过与京喜拼拼项目的合作,也驱使了我们更加关注这部分需求。Taro 推出了一套完整的原生项目混合使用 Taro 的方案。

方案主要支持了三种场景:

  • 在原生项目中使用 Taro 开发的页面。(已完成)
  • 在原生项目的分包中运行完整的 Taro 项目。(已完成)
  • 在原生项目中使用 Taro 开发的自定义组件。(正在开发中)

希望以上方案能满足打算逐步接入 Taro 开发的同学。更多意见也欢迎在 Github 上给我们留言。

四、拥抱 React 17、TypeScript 4

1. 如何使用

新项目:

模板默认依赖 React 17、TypeScript 4,可直接使用。

旧项目:

手动升级项目中 reactreact-domtypescript@typescript-eslint/parser@typescript-eslint/eslint-plugin 的版本。

2. 改动

3.1 默认支持 New JSX Transform,开发者可以不在书写 JSX 前先引入 React

旧项目升级 React 17 的开发者还需要设置 ESLint 配置:

// .eslintrc
module.exports = {
  "extends": ["taro/react"],
  "rules": {
    "react/jsx-uses-react": "off",
    "react/react-in-jsx-scope": "off"
  }
}

如果不希望打开此功能,可以配置 Babel Taro preset 的 reactJsxRuntime 选项为 classes

// babel.config.js
module.exports = {
  presets: [
    ['taro', {
      framework: 'react',
      ts: true,
      reactJsxRuntime: 'classes'
    }]
  ]
}

2.2 H5 端编译 React 时默认开启 fast refresh

如果不希望打开此功能,可以修改 Taro 配置项和配置 Babel Taro preset:

// config/index.js
const config = {
  h5: {
    devServer: {
      hot: false
    }
  }
}
// babel.config.js
module.exports = {
  presets: [
    ['taro', {
      framework: 'react',
      ts: true,
      hot: false
    }]
  ]
}

特性

  • 组件 View 增加 catchMove 属性,解决滚动穿透问题。

修复

重要

  • 修复百度小程序渲染问题,#7293
  • 修复、增强微信小程序转换为 Taro 的能力。
  • 支付宝小程序支持引用自定义组件
  • 同步所有内置小程序官方最新的 API、组件能力。
  • 修复小程序分享 API 在使用 redux 时无法生效的问题,#7232
  • 修复 H5 端 HMR 刷新失效的问题。

小程序

  • 修复多端文件没按照 Webpack extension 配置解析的问题,#6786#7265
  • 修复 style 属性设置失败的问题,#8678

H5

  • 支持路由 404 时触发 App.onPageNotFound#7474
  • 修复表单组件 slot 兼容问题,#7363
  • 修复 ViewText 组件多行截断样式失败问题,#7472 #6741
  • 组件的 style 属性支持设置 CSS 变量,#7452

升级指南

从 v2.x 升级的同学需要先按 迁移指南 进行操作。

从 v3.x 升级的同学,首先需要安装 v3.1 的 CLI 工具:

npm i -g @tarojs/cli

然后进入项目,删除 node_modulesyarn.lockpackage-lock.json

最后把 package.json 文件中 taro 相关依赖的版本修改为 3.1.0,再重新安装依赖。至此升级结束。

End

最后,衷心感谢为 Taro 从 v3.0 走到 v3.1 贡献过代码的各位同学!

Don't miss a new taro release

NewReleases is sending notifications on new releases.