Weex 新手記

PJHubs_xx發表於2018-11-24

前言

leader 想讓我轉大前端,當時我內心還是比較興奮的,因為這跟我最開始對自己的定位是完全一致的,但後續做了一些後端的東西后,發現自己對後端也有感覺,不過實話實說都還在比較淺薄的層面上。

上週末我想了兩天,發現自己確實得在大前端這塊上繼續“拋頭顱,灑熱血”,不單是再精進一些之前已掌握的知識,更是擴充了自己在稍微擅長的一個領域站得更穩,剛好最近負責的產品有往“跨平臺”的開發模式上轉,需要提前做些調研工作,再跟上最近團隊人員的變動,新來的同學有意願切入 Weex 跨平臺框架。

當然,對於我個人而已,我完全不喜歡任何非原生的東西,甚至目前到了用別人的庫都覺得“怪異”,今年年初的時候把當時最火的兩個跨平臺框架“小程式”和 “React-Native” 都擼了一遍,但就僅僅從 demo 這個級別出發,當時就已經非常的厭惡各種跨平臺的開發框架了,總有些說不出的“怪異”之處,但也不能說它們毫無是處,在編寫 demo 的過程中,很多基礎元件上手就用,比 Native 開發效率上都大大提升了不只一兩倍這麼簡單。

經過一週短暫的、磕磕碰碰的學習,也把今年學習的第三個目前也十分火爆的跨平臺框架—— Weex 寫出了 demo,其中大部分思路來源於 Weex 的官方文件和教學視訊。如果你感興趣的話,可以掃描下方二維碼進行試玩:

1543064551.png

Weex 簡單介紹

對於 Weex 的介紹在網上已有大量的講解,在此用自己的話可以總結如下:

  • Weex 寫起來很爽,前提是:對動畫無要求;對互動無要求;對效能無要求;業務邏輯不復雜。
  • 如果你司技術棧 Javascript 為主體且依賴 Vue,排除第一條後,上 Weex 幾乎沒有懸念,畢竟到現在 Weex 都被認為是 Vue-Native
  • 如果你司已經沉澱出了大量 Native 經驗,上 Weex 幾乎可以認定公司要倒(只是比喻 ? );反之,如果你司是 web 主導,想切入 Native 端,滿足第一條後,再考慮 React-Native 是否符合自身技術棧,其次再來考慮 Weex。驗證我這番話,可以對比 RN 和 Weex 的官方文件和社群,當然 Weex 還是十分的年輕,但和 React-Native 二者正式開源也就前後相隔一年左右。
  • 據我所知,目前“極客時間“、”企鵝電競“等 App 已經是純 Weex 開發,甚至桔廠”順風車“也全面擁抱,可見其威力有多大!

知識點

該 demo 中運用到的主要相關知識點如下:

  • Weex 內建元件:divtext
  • Weex 內建模組:navigatorstoragedom
  • Weex custom Component
  • CSS 基本內容
  • Vue.js 基本內容
  • Javascript 基本內容

頁面展示

index.html

5bf9564943b55.png

add.html

5bf95686d9727.png

detail.html

5bf956a8ae508.png

開發過程

Weex 吸收了目前最流行的 MVVM 和麵向元件開發的思想,上文中我所說的“爽”就來自於此!舉一個例子,navbar 元件,編寫一個元件相對 Native 來說,真的是又快又爽!在 <tempalte> 中寫好元件模版程式碼,在 <script> 中寫好事件處理、屬性定義、生命週期管理,在 <style> 中寫好 CSS 樣式佈局,想要給別人用,直接拖走這個 .vue 檔案即可完事(當然 native 也是一樣)。我覺得能有如此便利,多虧 CSS,在 native 實現一個功能可能使用 CSS 只需要兩三行即可完事!

navbar 元件

<template>
  <div class="navbar">
      <!-- v-if 判斷是否需要展示返回 icon -->
      <text v-if="showBack" class="iconfont navbar-icon" @click="onBack">&#xe779;</text>
      <text v-else class="navbar-title"></text>
      <text class="navbar-title">{{ title }}</text>
      <text class="navbar-title"></text>
  </div>
</template>

<script>
const navigator = weex.requireModule('navigator')
export default {
  name: 'navbar',
  props: {
    showBack: {
      type: Boolean,
      default: true
    },
    title: {
      type: String,
      required: true
    }
  },
  beforeCreate () {
    const domModule = weex.requireModule('dom')
    domModule.addRule('fontFace', {
      'fontFamily': 'iconfont',
      'src': "url('http://at.alicdn.com/t/font_933576_ji32n9fdyki.ttf')"
    })
  },
  methods: {
    onBack () {
      navigator.pop({
        animated: 'true'
      })
    }
  }
}
</script>

<style scoped>
.iconfont {
    font-family: iconfont;
  }
.navbar {
  height: 88px;
  background-color: #50e3a4;
  flex-direction: row;
  justify-content: space-between;
  align-items: center;
  padding-left: 20px;
  padding-right: 20px;
}
.navbar-title {
  font-size: 32px;
  color: #fff;
}
.navbar-icon {
  color: #fff;
  font-size: 36px;
}
</style>

相關注意點

安裝 Weex 工具包

npm install weex-toolkit -g

從零開始建立 Weex 工程

weex create awesome-app

在建立工程的過程中,會提示一些關鍵資訊,比如作者、是否使用 vue-routerESLint 等等,根據提示等待即可。

新增 iOS 工程

weex platform add ios

構建 js bundle

weex run build

在 dist 資料夾下拿到對應的 js bundle 檔案。

切換顯示

在工廠目錄下執行 npm start 後,會在瀏覽器開啟一個“套殼”的頁面,有很多不需要的元素,如果不需要的話,可以這麼做:

  • 假設執行 nmp start 後,開啟的地址為:http://172.20.10.4:8081/web/preview.html?page=index.js
  • 把地址改為:http://172.20.10.4:8081/index.html,這樣就去除掉了多餘不需要的元素了,頁面變得十分乾淨

新增頁面

新增頁面後,此時如果通過瀏覽器直接輸入地址訪問會 404,因為此次 build 出來的資原始檔中並未包含我們新增的頁面,需要重新執行 npm start 進行重新構建。

flex-direction

決定你的頁面佈局主要方向,是row(水平)還是column(垂直佈局)。

align-items

決定父容器中的元素在水平方向上的佈局,想要居中則設定為 center

align-content

決定父容器中的元素在垂直方向上的佈局,想要居中則設定為 center

justify-content

決定父容器中的元素在主軸上如何排列,如果想要等分佈局,則設定為 space-around,左右邊距將為中間間隔的一半。

align-items

決定元素在交叉軸上如何排列

dist

通過 webpack 打包後生成的 JS Bundle 檔案都在 dist 資料夾下。

在模版中,Vue 會把駝峰命名的元件自動轉換成短橫線連線

Boolean

在 Weex 中關於 bool 值,本質上為字串,比如"true" 這樣才是“真”,true這樣什麼也不是,官方說會在未來版本中進行修復,還有很多類似這種容易引起“差評”的地方。

Weex SDK

構建出來的 js bundle 直接直接可以拖入工程使用,在 iOS 下,看到的渲染後的頁面層級如下:

5bf95a719ad28.png

檢視 WeexSDK,可以看到基本上把原生元件都按照 Weex 支援的格式封裝了一遍,所以加入跨平臺框架後,app 體積不上升是不可能的,只不過得看用什麼個優化方法了(刪刪刪哈哈哈~)

總結

本來想系統的介紹一下 Weex 的開發流程和部分細節,下次有機會再愉快的玩耍吧~本次 Weex demo 的練習,讓自己對 Weex 和 Vue 都有了一個直觀的感受,到現在給我印象最深刻的不是 Weex 而是 Vue,感觸良多。對原生開發的喜愛又多了不少,在今天這個時代背景下,求快不求穩,不管怎麼說,我還是一個堅定的原生開發者~

原文地址:PJ 的 iOS 開發日常

優秀的人遵守規則,頂尖的人創造規則

相關文章