weex 入門個(gè)人全總結(jié)

附錄::vue2.0 個(gè)人demo地址领炫,有一些打包西壮、路由處理的代碼可供參考,喜歡的話遗增,給個(gè)star,哈哈

一款青、weex介紹

Weex 是一套簡(jiǎn)單易用的跨平臺(tái)開發(fā)方案做修,能以 web 的開發(fā)體驗(yàn)構(gòu)建高性能、可擴(kuò)展的 native 應(yīng)用抡草。在最新的weex版本中饰及,已經(jīng)將vue作為默認(rèn)的上層框架,并遵循 W3C 標(biāo)準(zhǔn)實(shí)現(xiàn)了統(tǒng)一的 JSEngine 和 DOM API康震,這樣一來旋炒,你就可以體驗(yàn)到基于vue的webapp的開發(fā)體驗(yàn),打造三端一致的 native 應(yīng)用签杈。

幾種APP開發(fā)模式

NativeApp RN weex WebApp Hybird
即傳統(tǒng)的原生APP開發(fā)模式,Android基于Java語言,底層調(diào)用Google的 API;iOS基于OC或者Swift語言,底層調(diào)用App官方提供的API瘫镇。 Facebook發(fā)起的開源的一套新的APP開發(fā)方案,使用JS+部分原生語法來實(shí)現(xiàn)功能鼎兽。初次學(xué)習(xí)成本較高,但是在入門后,經(jīng)過良好的封裝也能夠?qū)崿F(xiàn)大部分的跨平臺(tái)。 Weex最底層的原理是和React-Native相同的铣除,就是將JS代碼渲染成原生組件只不過在業(yè)務(wù)代碼層面谚咬,Weex和React-Native有差別 即移動(dòng)端的網(wǎng)站,將頁面部署在服務(wù)器上,然后用戶使用各大瀏覽器訪問。一般泛指 SPA(Single Page Application)模式開發(fā)出的網(wǎng)站尚粘。 即混合開發(fā),由Native通過JSBridge等方法提供統(tǒng)一的API,然后用Html5+JS來寫實(shí)際的邏輯,調(diào)用API,這種模式下,由于Android,iOS的API一般有一致性,而且最終的頁面也是在webview中顯示,所有有跨平臺(tái)效果
體驗(yàn)最好 體驗(yàn)很好 體驗(yàn)很好 體驗(yàn)最差 體驗(yàn)不錯(cuò)

更詳細(xì)的對(duì)比 / rn和weex更詳細(xì)對(duì)比腦圖

二择卦、如何搭建weex項(xiàng)目

Weex也和前端項(xiàng)目一樣,擁有它自己的腳手架全家桶郎嫁。weex-toolkit + weexpack + playground + code snippets + weex-devtool秉继。

weex-toolkit 是官方提供的一個(gè)腳手架命令行工具,你可以使用它進(jìn)行 Weex-pack 項(xiàng)目的創(chuàng)建泽铛,調(diào)試等功能尚辑。

安裝,使用npm進(jìn)行安裝盔腔,確保你的node版本>=6
?
$ npm i -g weex-toolkit杠茬。

1、初始化 weex 項(xiàng)目

$ weex init weex-demo

執(zhí)行完命令后弛随,在 weex-demo 目錄中就創(chuàng)建了一個(gè)使用 Weex 和 Vue 的模板項(xiàng)目瓢喉。然后我們進(jìn)入項(xiàng)目所在路徑,weex-toolkit 已經(jīng)為我們生成了標(biāo)準(zhǔn)項(xiàng)目結(jié)構(gòu)舀透。在 package.json 中栓票,已經(jīng)配置好了幾個(gè)常用的 npm script,分別是:

build: 源碼打包愕够,生成 JS Bundle
dev: webpack watch 模式走贪,方便開發(fā)
serve: 開啟靜態(tài)服務(wù)器
debug: 調(diào)試模式

2、項(xiàng)目的運(yùn)行

$ npm run build

$ npm run serve

?
3链烈、weex項(xiàng)目調(diào)試:

這里需要下載一個(gè)weex-playground,是一個(gè)上架的App厉斟,ios直接在掃碼,安卓可以點(diǎn)擊這里這個(gè)可以用來通過掃碼實(shí)時(shí)在手機(jī)上顯示出實(shí)際的頁面强衡。

 $ npm run debug

使用手機(jī)上的weexplayground掃描瀏覽器打開的二維碼擦秽。

image.png

單純啟動(dòng)一個(gè)調(diào)試服務(wù)器,并同時(shí)喚起Chrome瀏覽器打開調(diào)試主頁漩勤。


image.png

這個(gè)調(diào)試主頁上會(huì)有一個(gè)二維碼感挥,使用 Playground App 掃這個(gè)二維碼可以開啟 Playground 調(diào)試。開啟調(diào)試后,設(shè)備列表中會(huì)出現(xiàn)您的設(shè)備越败,根據(jù)提示進(jìn)行后續(xù)的調(diào)試操作触幼。其中:

Inspector 能夠用來查看 Element \ NetWork \ Console log \ ScreenCast \ BoxModel \ Native View 等。

native組件樹:

image.png

html組件數(shù):

image.png
Debugger 用來調(diào)試 Weex 中的 JS 代碼究飞,能夠設(shè)置斷點(diǎn)置谦、查看調(diào)用棧堂鲤。     
image.png

weex-pack
weexpack 是新一代的weex應(yīng)用工程和插件工程開發(fā)套件,是基于weex快速搭建應(yīng)用原型的利器媒峡。它能夠幫助開發(fā)者通過命令行創(chuàng)建weex應(yīng)用工程和插件工程瘟栖,快速打包 weex 應(yīng)用并安裝到手機(jī)運(yùn)行,同時(shí)對(duì)于開發(fā)者而言還能夠創(chuàng)建weex插件模版并發(fā)布插件到weex應(yīng)用市場(chǎng)谅阿。 使用weexpack 能夠方便的在在weex工程和native工程中安裝插件半哟。

目前weex-toolkit集成對(duì)weexpack的命令調(diào)用支持,你可以使用weex-toolkit命令來實(shí)現(xiàn)weexpack具備的功能签餐。比如我們要實(shí)現(xiàn)添加iOS應(yīng)用模板:

首先寓涨,全局安裝 weex-pack 命令:
$ npm install -g weexpack

初始化項(xiàng)目
$ weexpack create <project name>

添加應(yīng)用模版,官方提供的模版默認(rèn)支持 weex bundle 調(diào)試和插件機(jī)制氯檐,注意模版名稱均為小寫戒良,模版被安裝到platforms目錄下:
$ weexpack platform add ios # 使用weexpack 命令
$ weex platform add  ios # 使用weex-toolkit,添加native模板

打包應(yīng)用并安裝運(yùn)行
$ weexpack run ios 
$ weexpack run android

更詳細(xì)的的打包以及插件機(jī)制男摧,見https://github.com/weexteam/weex-pack

weex toolkit 與 weex-pack 的區(qū)別

weex-toolkit 初始化的項(xiàng)目是針對(duì)開發(fā)單個(gè) Weex 頁面而設(shè)計(jì)的蔬墩,也就是說這樣的項(xiàng)目只包括單個(gè)頁面開發(fā)需要的東西译打,比如前端頁面源文件耗拓、webpack 配置、npm 腳本等奏司。項(xiàng)目產(chǎn)生的輸出就是一個(gè) JS Bundle 文件乔询,可以自由的進(jìn)行部署。

weex-pack 是初始化一個(gè)完整的 App 工程韵洋,包括 Android 和 iOS 的整個(gè) App 起步竿刁,前端頁面只是其中的一部分。這樣的項(xiàng)目最終產(chǎn)出是一個(gè) Android App 和一個(gè) iOS App搪缨。

官方最近在考慮整合食拜,無限等待....

三、weex中vue的應(yīng)用

1副编、weex中默認(rèn)使用.vue 文件,基于template, style, script 快速構(gòu)建組件化的應(yīng)用负甸。

2、支持vue大部分的api痹届,除了一些dom有關(guān)的呻待,比如一些鍵盤事件的修飾符({keyCode|keyAlias})、v-text

3队腐、頁面狀態(tài)之間的共享和隔離

所有的weex頁面蚕捉,不管是基于vue和rax,都公用了一個(gè)weex runtime柴淘,其中js引擎只初始化一次迫淹,除非重啟秘通,這種情況下,如果共享全局狀態(tài)很有可能造成內(nèi)存泄漏敛熬,因此最好是隔離頁面狀態(tài)充易。因此weex在原生應(yīng)用中大多是以'多頁的實(shí)現(xiàn)存在',因此不支持Vue的一些全局功能荸型,如Vue.config盹靴、Vue.filter、Vue.mixin瑞妇、Vue.use稿静,不過依然可以在一個(gè)單頁中使用,每一個(gè)單頁中還是用的同一個(gè)實(shí)例的

4辕狰、另外針對(duì)vue-router和vuex大部分在weex中都能完整應(yīng)用改备,部分差異可見[weex中使用vue全家桶的差異性](https://weex.apache.org/cn/references/vue/difference-of-vuex.html)。

在演示項(xiàng)目中蔓倍,使用的是web端完整單頁悬钳,通過路由跳轉(zhuǎn),但是native端偶翅,復(fù)雜單頁中使用vue-router,多頁場(chǎng)景是使用navigator模塊默勾,[點(diǎn)擊查看跳轉(zhuǎn)邏輯](https://github.com/yinshuxun/weex-start-kit/blob/master/src/mixins/index.js)

5、編譯環(huán)境 

針對(duì) Web 平臺(tái)聚谁,和普通 Vue 2.X 項(xiàng)目一樣母剥,可以使用任意官方推薦的方式編譯源文件,如 Webpack + vue-loader 或者 Browserify + vueify 形导。
針對(duì) Android 和 iOS 平臺(tái)环疼,我們使用 weex-loader 工具支持編譯 .vue 格式的單文件組件;也就是說朵耕,目前只能使用 Webpack + weex-loader 來生成原生端可用的 js bundle炫隶。

四、weex與web平臺(tái)的差異

  • BOM & DOM

    1阎曹、不支持dom操作

    2伪阶、僅支持部分事件類型,

    3芬膝、沒有window/location/document/history/navigator等等對(duì)象望门。但是提供了諸如
    WXEnvironment對(duì)象,可以獲取到當(dāng)前設(shè)備的屏幕或者環(huán)境信息锰霜。

    4筹误、weex SDK >= 0.10.0 的才支持事件冒泡

  • 布局 & css

    1、只支持flex

    2癣缅、不允許使用id厨剪,只允許用class

    3哄酝、不支持后代選擇器或者繼承

    4、樣式必須寫完整 如background:red; => background-color => red;

    5祷膳、不能設(shè)置背景圖片

    6陶衅、動(dòng)態(tài)綁定class需要使用數(shù)組形式

  • 組件

    1、只有scroll/list組件有滾動(dòng)效果

    等等 ....

五直晨、weex基本工作原理

![Upload image.png failed. Please try again.]

?
工作流
we\vue 文件 ————–前端(we\vue源碼)
↓ (轉(zhuǎn)換) ——————前端(構(gòu)建過程)
JS Bundle —————–前端(JS Bundle代碼)
↓ (部署) ——————服務(wù)器
在服務(wù)器上的JS bundle —-服務(wù)器
↓ (編譯) —————— 客戶端(JS引擎)
虛擬 DOM 樹 ————— 客戶端(Weex JS Framework)
↓ (渲染) —————— 客戶端(渲染引擎)
Native視圖 ————— 客戶端(渲染引擎)

和如今 web 開發(fā)的最佳實(shí)踐一樣搀军,Weex 會(huì)把一個(gè)頁面的源代碼全部編譯打包成一個(gè) JS bundle,在瀏覽器中勇皇,我們需要把這個(gè) JS bundle 作為一段 <script> 載入網(wǎng)頁罩句,在客戶端里,我們把這段 JS bundle 載入本地敛摘,并通過 WeexSDK 直接執(zhí)行门烂。

六、 weex項(xiàng)目中webpack打包的方式

和傳統(tǒng)的vue項(xiàng)目不同的是兄淫,weex項(xiàng)目中的webpack打包需要區(qū)分打包web端以及native端屯远,在web端,直接使用vue-loader加載器捕虽,將所有組件進(jìn)行單頁打包即可慨丐,并且為了使用weex官方分裝的組件,需要在入口安裝weex-vue-render模塊
而native端是需要使用weex-loader加載器薯鳍,根據(jù)多頁分別進(jìn)行打包咖气。詳情可見配置

附錄:https://github.com/yinshuxun/weex-start-kit

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末挨措,一起剝皮案震驚了整個(gè)濱河市挖滤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌浅役,老刑警劉巖斩松,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異觉既,居然都是意外死亡惧盹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門瞪讼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钧椰,“玉大人,你說我怎么就攤上這事符欠〉障迹” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵希柿,是天一觀的道長(zhǎng)诊沪。 經(jīng)常有香客問我养筒,道長(zhǎng),這世上最難降的妖魔是什么端姚? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任晕粪,我火速辦了婚禮,結(jié)果婚禮上渐裸,老公的妹妹穿的比我還像新娘巫湘。我一直安慰自己,他們只是感情好昏鹃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布剩膘。 她就那樣靜靜地躺著,像睡著了一般盆顾。 火紅的嫁衣襯著肌膚如雪怠褐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天您宪,我揣著相機(jī)與錄音奈懒,去河邊找鬼。 笑死宪巨,一個(gè)胖子當(dāng)著我的面吹牛磷杏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捏卓,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼极祸,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了怠晴?” 一聲冷哼從身側(cè)響起遥金,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蒜田,沒想到半個(gè)月后稿械,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冲粤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年美莫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梯捕。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡厢呵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出傀顾,到底是詐尸還是另有隱情襟铭,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站蝌矛,受9級(jí)特大地震影響道批,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜入撒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一隆豹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧茅逮,春花似錦璃赡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至挺身,卻和暖如春侯谁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背章钾。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工墙贱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贱傀。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓惨撇,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親府寒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子魁衙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容