Talk is cheap. Show me your code

使用 Taro 开发跨平台小程序

现在很多大厂都推出了自己的小程序平台,作为开发者,采用跨平台方案开发小程序几乎成了必选项

目前市面上跨平台解决方案基本只剩下 uni-app 和 Taro, 其他的比如 WePY飞冰 社区生态都不够活跃

由于公司采用 React 技术栈,所以最终选择了 Taro 3.x(写这篇博客时版本为 v3.6.2

 

一、创建项目

在合适的目录中执行以下命令

npx @tarojs/cli init myTaroApp

执行之后会在当前目录创建一个 myTaroApp 项目文件夹

注意:从 Taro v3.5 开始,Taro 将默认使用 React 18 版本

而对于 React 18,有以下注意事项:

- 开发支付宝小程序时,Webpack4 暂不支持使用 React18,#12134

- 受小程序环境限制,诸如新 SSR Suspense 等特性将不能在小程序中使用

- RN 暂不支持 React v18,需要等待 RN 官方输出支持方案

生成的目录结构编译配置可以参考官方文档,这里着重强调一下多平台的项目配置文件 project.config.json

为了能够适配不同小程序平台的配置文件不同的情况,Taro 为各个小程序平台添加各自的项目配置文件:

---------------------------

微信小程序:project.config.json

百度小程序:project.swan.json

字节跳动小程序:project.tt.json

QQ 小程序:project.qq.json

支付宝小程序:project.alipay.json

飞书小程序:project.lark.json

--------------------------- 

项目创建之后,执行 yarn dev:weapp 在开发模式下编译微信小程序

编译后会在项目根目录下生成 dist 目录,在微信开发者工具中打开该目录进行预览

 

 

二、路由

src/app.js 是项目的入口文件,这个文件不会渲染任何内容,但可以用来设置全局状态

/** 如果使用了 ts, 需要将文件名改为 app.tsx */

import { useEffect, PropsWithChildren } from 'react';
import { useDidShow, useDidHide } from '@tarojs/taro';
// 自行构建的状态管理,可使用 Redux
import { AppContext } from './contexts/AppContext';
import './app.less';

function App(props: PropsWithChildren) {
  // 可以使用所有的 React Hooks
  useEffect(() => { });

  // 对应 onShow
  useDidShow(() => { });

  // 对应 onHide
  useDidHide(() => { });

  return (
    <AppContext.Provider value={{}}>
      {props.children}
    </AppContext.Provider>
  );
}

export default App;

 Taro 沿用了微信小程序的路由规则,可以直接在 src/app.config.ts 中配置 pages

export default {
  pages: [
    /** 首页 */
    'pages/index/index',
    /** 个人中心 */
    'pages/user/index',
  ],
}

还可以在路由页面同级目录创建 .config.js 文件来实现页面配置

pages
├── index  //首页
│   ├── index.config.ts //页面配置
│   └── index.tsx //路由页面
└── user //个人中心
    ├── index.config.ts
    └── index.tsx

最后使用 navigateTo 或者 redirectTo 跳转页面

 如果跳转路径中携带了 URL 参数,可通过 Taro.getCurrentInstance().router.params 获取,详见 Taro 路由功能

 

 

三、多端开发

在应用中可通过环境变量 process.env.TARO_ENV 来判断当前编译的平台类型

枚举值有:weapp(微信)、swan(百度)、alipay(支付宝)、tt(字节跳动)、jd(京东)、qq、h5、rn

需要注意的是:不要解构 process.env 来获取环境变量,一定要使用完整书写(process.env.TARO_ENV)

// 正确写法
if (process.env.TARO_ENV === 'weapp') {
}

// 错误写法
const { TARO_ENV = 'weapp' } = process.env
if (TARO_ENV === 'weapp') {
}

除了通过 TARO_ENV 来判断当前平台类型以外,还可以通过文件名来区分

├── test.js                Test 组件默认的形式,编译到微信小程序、百度小程序和 H5 之外的端使用的版本
├── test.weapp.js          Test 组件的微信小程序版本
├── test.swan.js           Test 组件的百度小程序版本
└── test.h5.js             Test 组件的 H5 版本

在使用组件的时候,引入路径中不用携带平台类型代码,直接引入原文件

import Test from '@/components/test';

 

 

四、编译构建

开发完成后,使用 build:{ENV} 命令构建对应平台的小程序代码

比如构建微信小程序使用 npm run build:weapp,然后使用小程序开发工具提交代码

当项目越来越大,打包时间过长,可以考虑 Taro 官方推荐的优化方案《编写插件,将 Taro 编译打包耗时缩短至三分之一》

安装插件

npm install --save-dev thread-loader cache-loader taro-plugin-compiler-optimization

使用插件

// config/index.js
config = {
  // ...
  plugins: ['taro-plugin-compiler-optimization'],
}

 

posted @ 2023-05-10 16:18  Wise.Wrong  阅读(757)  评论(0编辑  收藏  举报