往期回顧
前面2期都講得是瀏覽器端的東西比較多,包括Webpack蒋情,雖然是Node處理的埠况,但是還是瀏覽器端用的多,對于現(xiàn)在的前端開發(fā)來說棵癣,不懂一點服務(wù)端的東西辕翰,簡直沒辦法活,一般的招聘要求都會加上要懂一門服務(wù)端的語言狈谊,例如:PHP喜命,Java之類的啦。如圖所示:
所以我們這期就講Node的東西河劝。
程咬金的三板斧
一壁榕、劈腦袋 -- 工具鏈
Node在前端領(lǐng)域使用最為廣泛的就是工具鏈了,一期提到的構(gòu)建工具都是Node寫的赎瞎,當(dāng)然還有其他很多工具牌里,比如:京東工程化,百度開源構(gòu)建工具FIS3务甥,微信發(fā)布的工作流工具等等一系列前端工具都是用Node寫的二庵。廣泛的說贪染,我認為一期提到的編輯器也算工具鏈的中的一種,Atom催享,vs code杭隙,Brackets都和Node密不可分。我個人感覺因妙,Node的發(fā)展痰憎,實際上大大解放了前端的生產(chǎn)力,對于其他的服務(wù)端語言的依賴基本可以說降到最低攀涵,可以依據(jù)自己的需要編寫工具來完成技術(shù)目標(biāo)铣耘。
這方面大家也可以自己來產(chǎn)出下,例如我自己寫了個小工具供自己使用:
vuejs 格式化 Atom插件
現(xiàn)在下載量也不錯以故,有2000多了蜗细,還有好幾個issues沒有處理,哭E辍炉媒!
二、鬼剔牙 -- 中間層
對于很多FE來說昆烁,要搭建一個后端環(huán)境很是麻煩吊骤,而且不熟悉,容易出錯(java静尼,ruby白粉,php),最糟的是自己不懂鼠渺,出錯了完全不會調(diào)試鸭巴,你的表情此時是這樣的:
那么在13、14年的時候拦盹,淘寶的前端團隊鹃祖,開始連續(xù)發(fā)文,前后端分離的思考和實踐系列文章掌敬,提到了中途島計劃,也就是把Node作為前端和服務(wù)端的中間層池磁,也就是這個架構(gòu)奔害,
從這種圖,不難看出地熄,Node取代原來php华临,java干的一部分事情,也就是我們常說的MVC框架中的VC基本都給Node來干端考,F(xiàn)E干的事情更多了雅潭,能掌握的東西多了揭厚,意味著對于自己更加靈活,可以考慮更多的組件化扶供,工程化筛圆,性能監(jiān)控,數(shù)據(jù)分析的事情椿浓。
這方面的實踐大家可以參考美團這邊的圖文:
三太援、掏耳朵 -- 火熱的全棧
Full Stack developer 是近年來熱炒的一個概念,究其原因扳碍,跟Node的火熱不無關(guān)系提岔,早些年講,一個人(大牛不算普通人)既要精通java又要精通js笋敞,html碱蒙,css還是很困難,很多思維都不太一樣夯巷,分開也很正常赛惩,而Node的出現(xiàn),為很多比較厲害的前端提供了切入到服務(wù)端的機會鞭莽,語言層面的問題不在是難點坊秸,重要的對服務(wù)端的知識點的熟悉程度。Node的最后一個大招就是替換一些傳統(tǒng)的服務(wù)端語言澎怒,例如php褒搔,ruby,java等喷面,在業(yè)務(wù)層上面使用Node來開發(fā)服務(wù)端完全不成問題星瘾。
例如: uber的調(diào)度系統(tǒng)幾乎都是用 node.js 編寫的
這方面的文章也有很多了,大家可以自己去搜搜看惧辈,包括各種框架琳状,還有各種開源系統(tǒng),都可以找到盒齿。當(dāng)然也還有各種各樣的坑和問題以待大家去踩和解決念逞。
說說自家事
我們公司來說的話,三板斧基本都用上了边翁,打包構(gòu)建自不用談翎承,基本每個前端都會用到,第二板斧我們公司已經(jīng)基本切換過來了符匾,年后3月啟動叨咖,目前是所有的web頁面都是Node作為中間層,替換了php的渲染,中間自然有很多的困難要克服甸各,但整體上來說開發(fā)的效率還是大大提升垛贤,不需要在配置php的環(huán)境,也不用在關(guān)心各種環(huán)境的依賴趣倾,整體上自己的一個獨立的服務(wù)聘惦,使用接口的形式和服務(wù)端通信。
那么三板斧為何會用到誊酌,主要是目前國內(nèi)最常見的mobile的web頁面部凑,基本在微信里面流傳,然后這些頁面還需要一定的數(shù)據(jù)交互碧浊,而且這種頁面的特點就是短平快涂邀,不需要那么嚴謹,這種頁面特別適合前端自己一擼到底箱锐,前后端通吃比勉,接上 MongoDB當(dāng)做數(shù)據(jù)庫,基本兩三天之內(nèi)就能開發(fā)一個活動頁面出來驹止,不需要對其他服務(wù)有任何依賴浩聋,包括微信授權(quán)都可以自己搞定,工作量其實比對接其他語言服務(wù)大不了多少臊恋,某些方面衣洁,我個人認為還減少了很多的溝通成本。
痛點-- 造就了自己的一個開源
先說說這個插件做什么的: 主要是自動的加載express框架下面的路由抖仅,免得一個一個路由需要手寫坊夫。
通常我們在express框架下面,寫路由的時候都是一個一個的手寫撤卢,然后在app.js里面去一個一個引用环凿,一般是這樣子的
那么好一點的情況,是這樣子的放吩,分散每一個相同名字的路由到文件中智听,然后引用文件在app.js里面。
但實際上你可能在項目中路由情況是這樣子的
你有什么想法渡紫?
雖然這樣子也就是一個文件多兩行代碼到推,我還是不爽,我為什么要因為同一個規(guī)則而去多寫這兩個代碼惕澎,而且10個兩行莉测,就是20行,原則上集灌,能用機器干的事情悔雹,就不人干,而且PHP的一些MVC框架可以自動加載路由欣喧,他們會有一個文件夾的分層腌零,很明顯,路由都放到Controller文件夾下唆阿,然后根據(jù)路由名來匹配文件名的相應(yīng)action益涧,依據(jù)這個我自己就擼了一個express的自動加載路由,然后考慮了下一些特殊情況驯鳖,做了點配置闲询,不過目前只是支持一級目錄,沒有考慮多級目錄情況浅辙,有需要可以自己添加扭弧,或者給我提issues。
照例總結(jié)
本篇文章主要講的是關(guān)于Node的東東记舆,它的使用方向鸽捻,更偏向結(jié)合前端的使用,并非是很深入的Node原理泽腮,也算是給很多前端解惑下御蒲,為什么要使用Node,以及如何使用Node诊赊,不要盲目的聽信別人的建議厚满,需要結(jié)合自己項目情況,技術(shù)水平碧磅,以及團隊配比碘箍。
更多的Node的使用細節(jié)和技巧建議關(guān)注:
下一篇我們開啟如何結(jié)合Webpack和express 搭建一個開發(fā)環(huán)境和項目目錄