基于taro + dva搭建小程序開發(fā)環(huán)境

Taro 簡介

Taro 是一套遵循 React 語法規(guī)范的多端統(tǒng)一開發(fā)解決方案。

官方網站:https://taro.aotu.io

現如今市面上端的形態(tài)多種多樣蝴悉,WebReact-Native微信小程序等各種端大行其道葫盼,當業(yè)務要求同時在不同的端都要求有所表現的時候蛋勺,針對不同的端去編寫多套代碼的成本顯然非常高瓦灶,這時候只編寫一套代碼就能夠適配到多端的能力就顯得極為需要。

使用 Taro抱完,我們可以只書寫一套代碼贼陶,再通過 Taro 的編譯工具,將源代碼分別編譯出可以在不同端(微信/百度/支付寶/字節(jié)跳動/QQ/京東小程序、快應用碉怔、H5烘贴、React-Native 等)運行的代碼。

DvaJS 簡介

DvaJS 首先是一個基于 reduxredux-saga 的數據流方案撮胧,然后為了簡化開發(fā)體驗桨踪,dva 還額外內置了 react-routerfetch,所以也可以理解為一個輕量級的應用框架芹啥。

搭建小程序開發(fā)環(huán)境

一锻离、安裝 Taro

Taro 項目基于 node,請確保已具備較新的 node 環(huán)境(>=8.0.0)墓怀。

首先汽纠,需要使用 npm 或者 yarn 全局安裝 @tarojs/cli

# 使用 npm 安裝 CLI
npm install -g @tarojs/cli
# OR 使用 yarn 安裝 CLI
yarn global add @tarojs/cli
# OR 安裝了 cnpm,使用 cnpm 安裝 CLI
cnpm install -g @tarojs/cli

# 安裝 taro 時可能遇到的問題

- windows平臺安裝完成后使用 taro --version 查看版本號時傀履,發(fā)現存在舊版本的 taro

1虱朵、在系統(tǒng)中找到 node 全局模塊目錄 C:\Users\{用戶}\AppData\Roaming\npm\node_modules\ 刪除掉 tarojs 目錄
2、npm cache clean -f 清理緩存
3钓账、使用安裝命令重新安裝

# 初始化項目

taro init 項目名稱

二碴犬、安裝 redux

cnpm install --save redux @tarojs/redux @tarojs/redux-h5 redux-thunk redux-logger

三、安裝 dva

cnpm install --save dva-core dva-loading

#安裝 dva 遇到的問題

- peerDependencies WARNING dva-loading@ requires a peer of dva-core@^1.1.0 | ^1.5.0-0 | ^1.6.0-0 but dva-core@2.0.2 was installed*

原因是 package.json 里面的一些依賴包的版本與 node.js 版本兼容問題導致的解決方法是把錯誤信息里提及的依賴包前面添加^梆暮,再 cnpm install 一下就可以了
這里將 package.json 里面 { "dva-core": "^2.0.2" } 修改為 { "dva-core": "^1.6.0-0" } 然后執(zhí)行 cnpm install

四服协、配置 dva

import { create } from 'dva-core';
import { createLogger } from 'redux-logger';
import createLoading from 'dva-loading';

let app
let store
let dispatch
let registered

function createApp(opt) {
  // redux日志
  opt.onAction = [createLogger()]
  app = create(opt)
  app.use(createLoading({}))

  if (!registered) opt.models.forEach(model => app.model(model))
  registered = true
  app.start()

  store = app._store
  app.getStore = () => store
  app.use({
    onError(err) {
      console.log(err)
    },
  })

  dispatch = store.dispatch

  app.dispatch = dispatch
  return app
}

export default {
  createApp,
  getDispatch() {
    return app.dispatch
  }
}

五、配置 app 的 models: /src/models/register.ts惕蹄,所有頁面的 models 都需要在這里注冊一下

import order from './order'
import product from './product'
import user from './user'

export default [
    order,
    product,
    user
]

六蚯涮、在 /src/app.tsx 入口文件中引入 dva , componentDidMount() 函數中的配置僅供參考

import Taro, { Component, Config } from '@tarojs/taro'
import Index from './pages/index/index'
import "@tarojs/async-await";
import { Provider } from "@tarojs/redux";
import dva from './utils/dva'
import models from '../../register';
import { globalData } from "../config/appsettings";
import './app.less'

// 如果需要在 h5 環(huán)境中開啟 React Devtools
// 取消以下注釋:
// if (process.env.NODE_ENV !== 'production' && process.env.TARO_ENV === 'h5')  {
//   require('nerv-devtools')
// }

const dvaApp = dva.createApp({
  initialState: {},
  models: models,
});
const store = dvaApp.getStore();   //  getStore是一個函數!B袅辍遭顶!要執(zhí)行!@崮琛棒旗!



class App extends Component {

  config: Config = {
    pages: [
      'pages/index/index'
    ],
    window: {
      backgroundTextStyle: 'light',
      navigationBarBackgroundColor: '#fff',
      navigationBarTitleText: 'WeChat',
      navigationBarTextStyle: 'black'
    }
  }

  async componentDidMount () {
    // 從路由獲取額外參數
        const referrerInfo = this.$router.params.referrerInfo;
        // 從獲取獲取查詢參數
        const query = this.$router.params.query as {
            [key: string]: string;
        };
        !globalData.extraData && (globalData.extraData = {});
        // 將路由參數保存到全局變量
        if (referrerInfo && referrerInfo["extraData"]) {
            globalData.extraData = referrerInfo["extraData"];
        }
        // 查詢參數與額外參數合并保存到全局變量
        if (query) {
            globalData.extraData = {
                ...globalData.extraData,
                ...query
            };
        }
}

  componentDidShow () {}

  componentDidHide () {}

  componentDidCatchError () {}

  // 在 App 類中的 render() 函數沒有實際作用
  // 請勿修改此函數
  render () {
    return (
      <Provider store={store}>
        <Index />
      </Provider>

    )
  }
}

Taro.render(<App />, document.getElementById('app'))

# 運行 taro 微信小程序時可能遇到的問題

在升級到 2.x 后使用 async/await 語法時可能會出現如下報錯

- 使用 async/await 時出現報錯 Function(...) is not a function

這是因為 @tarojs/mini-runner 使用的 postcss-loader 依賴了新版本的 regenerator-runtime 包,可能會與 babel-runtime 中依賴的 regenerator-runtime 版本沖突撩荣,而新版本的包無法在小程序中使用铣揉,所以導致了如上錯誤,解決辦法是在本地自行安裝 0.11.1 版本的 regenerator-runtime 包餐曹。

npm i --save regenerator-runtime@0.11.1

- 在 JS 中引入的圖片突然變成 base64 格式

在升級到 2.x 后可能會遇到在 JS 中引入的圖片突然變成 base64 格式了逛拱,是因為 2.x 小程序改用 Webpack 編譯后圖片都會經過 url-loader 進行處理,默認 10kb 大小以下的圖片(包含以下格式台猴,png | jpg | jpeg | gif | bmp)都會被轉為 base64朽合,如果不想這么做俱两,可以通過配置 mini.imageUrlLoaderOption 來解決

const config = {
 mini: {
    imageUrlLoaderOption: {
      limit: 10240 // 大小限制,單位為 b
    }
  }
}

轉載請保留原文地址 ( https://www.ekpro.cn/article/1581427772000140 )

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末曹步,一起剝皮案震驚了整個濱河市宪彩,隨后出現的幾起案子,更是在濱河造成了極大的恐慌讲婚,老刑警劉巖尿孔,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異筹麸,居然都是意外死亡活合,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門竹捉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芜辕,“玉大人尚骄,你說我怎么就攤上這事块差。” “怎么了倔丈?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵憨闰,是天一觀的道長。 經常有香客問我需五,道長鹉动,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任宏邮,我火速辦了婚禮泽示,結果婚禮上,老公的妹妹穿的比我還像新娘蜜氨。我一直安慰自己械筛,他們只是感情好,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布飒炎。 她就那樣靜靜地躺著埋哟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪郎汪。 梳的紋絲不亂的頭發(fā)上赤赊,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音煞赢,去河邊找鬼抛计。 笑死,一個胖子當著我的面吹牛照筑,可吹牛的內容都是我干的吹截。 我是一名探鬼主播录豺,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼饭弓!你這毒婦竟也來了双饥?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤弟断,失蹤者是張志新(化名)和其女友劉穎咏花,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體阀趴,經...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡昏翰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了刘急。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棚菊。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖叔汁,靈堂內的尸體忽然破棺而出统求,到底是詐尸還是另有隱情,我是刑警寧澤据块,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布码邻,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜蛇受,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一溶推、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凶杖。三九已至胁艰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間智蝠,已是汗流浹背腾么。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留杈湾,地道東北人解虱。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像漆撞,于是被迫代替她去往敵國和親殴泰。 傳聞我的和親對象是個殘疾皇子于宙,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內容