ionic2.X 自發(fā)布以來(lái),吸引了很多的開(kāi)發(fā)者進(jìn)來(lái)嘗試,品鮮。作為一個(gè)ionic的忠實(shí)粉絲,我從ionic1到ionic2,一直致力于在真實(shí)的項(xiàng)目中使用該技術(shù),因此有些小的感悟,特跟大家分享一下。下面我將從3個(gè)方面進(jìn)行分享,即:
1.使用ionic技術(shù)需要有哪些技術(shù)準(zhǔn)備?
2.如何看待ionic開(kāi)發(fā)中遇到的一些問(wèn)題?
3.怎么組織ionic開(kāi)發(fā)流程?
針對(duì)于上面的幾個(gè)問(wèn)題,我將依次進(jìn)行分享。
1.使用ionic技術(shù)需要有哪些技術(shù)準(zhǔn)備?
對(duì)于一個(gè)開(kāi)發(fā)者來(lái)說(shuō),ionic技術(shù)已經(jīng)屏蔽了許多原生開(kāi)發(fā)的細(xì)節(jié),我們真正可以做到一套代碼,三端(webapp,ios,android)部署,而且提供完整的前端樣式,讓許多沒(méi)有美工設(shè)計(jì)的app也能具有很多好看的界面。雖然ionic幫我們做了很多的事情,但是這并不是說(shuō)我們就可以不懂實(shí)現(xiàn)細(xì)節(jié)。因此我們?cè)谟胕onic技術(shù)敲完hello world程序后,需要有一些必須的技術(shù)了解。可是每個(gè)人的情況都不盡相同,我們?cè)撊绾巫鲞@些準(zhǔn)備?
根據(jù)我在ionic團(tuán)隊(duì)建設(shè),成員由非ionic技術(shù)人員成長(zhǎng)為ionic技術(shù)人員的過(guò)程的總結(jié),我建議為每個(gè)人制定不同的技術(shù)準(zhǔn)備計(jì)劃。但總的來(lái)說(shuō),大體每個(gè)人的計(jì)劃是這樣的:
1.1 轉(zhuǎn)型前是android或者 ios原生開(kāi)發(fā)人員
針對(duì)這種人員,需要學(xué)習(xí)并掌握html5,js,css3,熟悉npm工具命令,針對(duì)ionic2.X還需要學(xué)習(xí)typescript和angular2的相關(guān)概念。學(xué)習(xí)使用網(wǎng)頁(yè)調(diào)試工具(建議使用谷歌瀏覽器)和真機(jī)調(diào)試工具(谷歌瀏覽器的真機(jī)調(diào)試工具)
1.2轉(zhuǎn)型前是pc端網(wǎng)頁(yè)開(kāi)發(fā)人員
針對(duì)這種人員,需要學(xué)習(xí)移動(dòng)端網(wǎng)頁(yè)開(kāi)發(fā)基本知識(shí),需要學(xué)習(xí)使用真機(jī)調(diào)試工具(谷歌瀏覽器的真機(jī)調(diào)試工具),需要學(xué)習(xí)一些原生app打包發(fā)布的流程。需要學(xué)會(huì)利用工具(android stdio 或者xcode)查看真機(jī)日志。
1.3 轉(zhuǎn)型前是非上述人員
如果轉(zhuǎn)型前沒(méi)有做過(guò)網(wǎng)頁(yè)開(kāi)發(fā)或者android或者ios開(kāi)發(fā),那恭喜您,您可以直接學(xué)習(xí)ionic的開(kāi)發(fā),私聊我可以給您幫助。如果只是想快速的做一個(gè),不想學(xué)那么多的話(huà), 我建議你直接寫(xiě)您想寫(xiě)得程序,遇到問(wèn)題可以咨詢(xún)別人。
1.4 ionic團(tuán)隊(duì)建設(shè)
如果想建立ionic團(tuán)隊(duì)的話(huà),最好團(tuán)隊(duì)內(nèi)有人是從android或者ios轉(zhuǎn)型過(guò)來(lái)的,有人做過(guò)服務(wù)端口開(kāi)發(fā),有人做過(guò)網(wǎng)頁(yè)開(kāi)發(fā)。
1.5 小結(jié)
其實(shí)在做技術(shù)準(zhǔn)備的時(shí)候,不管是從哪種技術(shù)轉(zhuǎn)型,都應(yīng)該看一下官方給的demo和看1-3個(gè)別人的開(kāi)源項(xiàng)目。這樣的話(huà)就可以很快速的進(jìn)行項(xiàng)目開(kāi)發(fā)。
2.如何看待ionic開(kāi)發(fā)中遇到的一些問(wèn)題?
永遠(yuǎn)確定你不是遇到這個(gè)問(wèn)題的第一個(gè)人,懷著這樣的心態(tài)你遇到的問(wèn)題都不是坑。

2.1 大部分的問(wèn)題是因?yàn)殚_(kāi)發(fā)者的“疏忽”
疏忽害死貓,就算用一個(gè)很牛逼的人去看疏忽的代碼,也得花費(fèi)不少的時(shí)間。但是對(duì)于ionic新手來(lái)說(shuō),疏忽就是最大的問(wèn)題了。這是不可避免的,但是這也不可怕,一般疏忽的次數(shù)不會(huì)超過(guò)3次。當(dāng)自己寫(xiě)得程序不知道怎么的就是運(yùn)行不起來(lái)的時(shí)候,這時(shí)候就要仔仔細(xì)細(xì)檢查一下自己的代碼了。如果實(shí)在找不到錯(cuò)誤,那就請(qǐng)教大神,最終你會(huì)有茅塞頓開(kāi)的感覺(jué)。另外我建議,當(dāng)自己寫(xiě)完一段代碼后,最好立馬檢查一遍,因?yàn)檫@時(shí)候很容易發(fā)現(xiàn)錯(cuò)誤。尤其在ionic視圖模板時(shí),更應(yīng)該細(xì)心,更應(yīng)該檢查一遍。

2.2 語(yǔ)法不熟悉
這個(gè)問(wèn)題,其實(shí)沒(méi)什么好說(shuō)的,每個(gè)人都有可能犯。畢竟要學(xué)的東西那么多,但是最基本的語(yǔ)法必須要熟記于心啊。就比如 [],(),[()],類(lèi)的聲明,component聲明,幾個(gè)基本的生命周期事件,導(dǎo)航的使用。我建議要做到心中有疑問(wèn),就要去查字典。
2.3 “墻”的原因和版本問(wèn)題
如果你不懂得科學(xué)上網(wǎng),請(qǐng)修改npm的源為國(guó)內(nèi)的源。我們團(tuán)隊(duì)就是使用淘寶的源,下載和安裝各種包都很快。(如果不想改變?cè)吹脑?huà),可以在要執(zhí)行的命令后面直接添加--registry=https://registry.npm.taobao.org)。
另外在這個(gè)過(guò)程中可能會(huì)出現(xiàn)node-sass安裝不了的情況,解決方法如下:npm install node-sass --sass-binary-site = https://npm.taobao.org/mirrors/node-sass/。
有一些bug是由于使用版本比較老,無(wú)法使用舊版本的功能,就比如RC3的版本無(wú)法使用ionViewWillLeave事件,升級(jí)下版本就可以。有一些問(wèn)題是因?yàn)閚odejs版本問(wèn)題,升級(jí)下就會(huì)沒(méi)事。
總的來(lái)說(shuō),當(dāng)遇到這些問(wèn)題時(shí),不要慌不要急,Try It Again.
2.4 小結(jié)
遇到問(wèn)題不要怕,要學(xué)習(xí)總結(jié),再學(xué)習(xí)再總結(jié)。當(dāng)問(wèn)題越來(lái)越少了,你就成長(zhǎng)了。

3.怎么組織ionic開(kāi)發(fā)流程?
雖然ionic可以一套代碼生成多種平臺(tái)的運(yùn)行程序,但是為了更好的體驗(yàn),仍然需要對(duì)各種平臺(tái)進(jìn)行小修小補(bǔ)。于是需要有一套流程和標(biāo)準(zhǔn)用來(lái)把控這些“小修小補(bǔ)”。
3.1 團(tuán)隊(duì)內(nèi)人人都能接受的代碼規(guī)范
一個(gè)良好的代碼規(guī)范能夠提升軟件的產(chǎn)品質(zhì)量,降低后續(xù)的維護(hù)費(fèi)用等等,代碼規(guī)范的好處可以自行百度,我就不再?gòu)?qiáng)調(diào)。但是既然有代碼規(guī)范就要嚴(yán)格執(zhí)行。當(dāng)然這個(gè)代碼規(guī)范也要隨著ionic技術(shù)的發(fā)展不斷的與團(tuán)隊(duì)內(nèi)的成員一起優(yōu)化和改進(jìn)。
3.2 符合項(xiàng)目的開(kāi)發(fā)流程
針對(duì)于不同的項(xiàng)目有不同的開(kāi)發(fā)流程,但主體是一樣的,下面結(jié)合代碼管理功能列舉了ionic編碼階段常用的幾個(gè)流程:
- 網(wǎng)頁(yè)開(kāi)發(fā)階段。主要就是利用ionic技術(shù),開(kāi)發(fā)出瀏覽器支持的webapp的階段,這一階段的目標(biāo) 是構(gòu)建平臺(tái)無(wú)關(guān)的webapp應(yīng)用。這一階段對(duì)應(yīng) 代碼庫(kù)的主干;
- 原生開(kāi)發(fā)階段(可選)。利用ionic的各種插件,構(gòu)建平臺(tái)無(wú)關(guān)的原生app,這一階段對(duì)應(yīng) 代碼庫(kù)的主干;
- 分支開(kāi)發(fā)階段(可選)。 針對(duì)于ios和android風(fēng)格的表現(xiàn)不同,有針對(duì)性的修改,相應(yīng)代碼,以達(dá)到構(gòu)建出平臺(tái)有關(guān)的運(yùn)行良好的程序。比如 js的Date對(duì)象,在android和ios實(shí)例化的方式不同,需要針對(duì)ios進(jìn)行單獨(dú)優(yōu)化。這一階段對(duì)應(yīng) 代碼庫(kù)的各個(gè)分支;
- 開(kāi)發(fā)后期(可選)。主要是把分支階段針對(duì)于不同平臺(tái)的不同點(diǎn),進(jìn)行提煉和抽象,并把提煉的結(jié)果合并到主干庫(kù)中。這一階段的主要目標(biāo)是抽象現(xiàn)有代碼平臺(tái)的不同,為之后的升級(jí)維護(hù)提供便利。
3.3 小結(jié)
ionic的開(kāi)發(fā)流程同樣遵守軟件工程的開(kāi)發(fā)的流程和規(guī)范。在編碼的過(guò)程中應(yīng)該注意編碼的規(guī)范性,在開(kāi)發(fā)完成前要做分支開(kāi)發(fā)的抽象和擴(kuò)展,以方便以后的升級(jí)維護(hù)。