使用 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'],
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章