新聞動态News

地(dì)址:鄭州市金(jīn)水(shu舊技ǐ)區未來路(lù)104化現号廣電大(dà)廈18層
電話(huà):0371-633分綠60901
郵箱:527069720@qq.com
郵編:450002

行(xíng)業(yè)動雪黃态
您當前的(de)位置:網站首頁 > 新聞動态 > 行(xíng)業(yè)紙答動态
[轉]2015 前端[JS]工(家街gōng)程師(shī)必知必會(huì) 發布時間:2015-03-24&nb黑身sp;   那跳;關注:1315

從2012年到(dào)現在,一篇文(wé著些n)章(zhāng)都(dōu)沒發過讓我覺得有的問(yǒu)點羞羞哒。三年是弟妹一段很長的(de)時間,很多東西(xī)都(d聽到ōu)發生了改變。201上東2年,我鼓勵同學們去學習愛訊(xí)浏覽器(qì)開(kāi)發者工(g冷就ōng)具和(hé)模塊化;雖書懂然有(yǒu)很多同學會(huì)覺湖到得CSS預編譯和(hé)客制她戶端模闆引擎并不靠譜,但(dàn空弟)我仍然想要說一說它們;還有(yǒu)JSHin明又t,雖然有(yǒu)#get票還offmylawn(滾出我的(de)地(dì大行)盤)的(de)警告,但(dàn)那在依然無法阻止JSHint成爲一個(gè)受歡來妹迎的(de)理(lǐ)念(準确的(de件身)說,JSLint真的(de)(隻是黃化)存在過)。 

已經是2015年了,我想寫一篇新的(畫數de),但(dàn)是當我坐下來開訊市(kāi)始動筆(bǐ)對下的(de)時候,想到(dào)了兩個(間子gè)事情。一,這些東西地國(xī)被稱作“必知必會(huì)”可(kě)林日能(néng)有(yǒu)人(rén)會(huì間農)覺得不太公平——如(rú)果你(nǐ)已經覺動工得2012年的(de)那篇文(wén)章(銀師zhāng)如(rú)此,那本文(w生從én)也(yě)是一樣的(de)了。也(yě大訊)許有(yǒu)同學會(huì)說,我們應該把報商 “足夠應付業(yè)務需求的(de)技能(中老néng)” 作爲 “前端必須掌握短術的(de)知識”,但(dàn吃如)考慮到(dào)前端行(xíng)業(y門靜è)裏也(yě)有(yǒu)各種各樣的(de)購房工(gōng)作可(kě)花制供選擇,這麽做也(yě)隻能(néng)間東得到(dào)一個(gè)并不适合所有家志(yǒu)人(rén)的(de) “前端基礎知識老你”。對于我來說,我需要的(de河光)不是工(gōng)作,我想要的(de)是被邀新但請去做一份牛逼的(de)工(gō著門ng)作。我想要的(de)不隻是去幹活而已,嗎對而是想和(hé)一群牛逼的機村(de)人(rén)一起做牛逼的報藍(de)事。我不想僅僅滿足于用(yòng)劇來已有(yǒu)的(de)知黑笑識來完成現在的(de)工(玩他gōng)作,而是希望掌握更多的(d鐵事e)知識來解決未來将會(huì)面對的女我(de)問題。 

第二,我現在已經完全把Javascript作爲校靜我的(de)核心了:CSS知識隻有(yǒu)在書和必須關注性能(néng)問題時才會(花她huì)用(yòng)到(dà信相o),其他(tā)場(chǎng)景白城已經用(yòng)的(de)會朋越來越少(shǎo)。我知道有兵電(yǒu)很多牛逼的(de)坐理前端同學并不是這樣的(de),但(dàn)錯藍我也(yě)意識到(dào),關注JS的(d關雪e)同學和(hé)關注CSS的月老(de)同學之間的(de)距離房湖(lí)也(yě)越來越遠。這可(kě)能月問(néng)需要在另起一篇文(wén)章(zhā要地ng)來討(tǎo)論,不過我想說的(de)女子是,這篇文(wén)章(zhāng)中不會(h光睡uì)有(yǒu)介紹CSS技能(né用匠ng)标準的(de)内容,些土因爲我還遠遠沒有(yǒu見些)達到(dào)能(né厭錢ng)那麽做的(de)水(近場shuǐ)平。 自員

總之,就算這個(gè)技能(néng)文訊列表并不适合你(nǐ)的(d頻可e)前端工(gōng)作,沒通放關系,不要有(yǒu)壓力,地(dì)球也(yě如路)不會(huì)爆炸。 

JavaScript 

回想2009年,那時候當你(n我姐ǐ)知道 HTML5 在2014年才煙到能(néng)用(yòng)的(我厭de)時候,你(nǐ)是不是覺得這輩見船子基本上(shàng)都(dōu)用(yòn讀明g)不到(dào)它了?如(rú)果是,那麽你(匠票nǐ)需要準備好接受進展緩慢(màn)但(dàn她民)是已經趨于穩定的(de)E什家S6了,它也(yě)是下答答一代的(de)Javascript資微(現在叫 ES2015 了,嗯,這名字至秒水少(shǎo)表示今年就能(n弟森éng)用(yòng)了)。就劇懂我而言,ES6,額,ES20討作15 無疑是我個(gè)機關人(rén)現在最關注的(de) Jav生器ascript 内容。在 ES6知喝 中将會(huì)出現一些劇妹比較大(dà)的(de)變化:類,真正的友弟(de)私有(yǒu),經過改進更易用(yòng年我)的(de)函數和(hé)參數設定,可(kě)導東下入的(de)模塊,等等等等。那些掌握和(hé)道煙理(lǐ)解新的(de)語法的(de)媽北同學以後将會(huì)在 舊鐘JS 社區牛逼閃閃。相(xiàng)關紅坐閱讀(dú): 

Understanding 機大ES6,Nicholas Zakas 正在寫呢業的(de)書(shū)。 
BabelJS,一個(gè)可(kě美地)以把你(nǐ)寫的(de) ES6 的(d舊國e)代碼編譯成 ES5 并在現代浏覽說學器(qì)中運行(xíng)的(de)現頻工(gōng)具。他(tā)們也(yě)有(影高yǒu)一個(gè)不錯的(de)介紹 ES6 的(de)文兒農(wén)檔。 
ES6 Rocks,裏面有(yǒu)大(dà)量的(d大們e)文(wén)章(zhā廠新ng)探索 ES6 的(雨黃de)特性,語義和(hé)缺陷。&n湖我bsp;
你(nǐ)也(yě)許會(huì外服)問:那我需要成爲一個(gè) ES6 專家麽現裡?也(yě)許現在不需要,但(d店北àn)至少(shǎo)你(nǐ)得和麗話(hé)你(nǐ)的(d到體e)同事懂的(de)一樣多吧(花子ba)?或者比他(tā)們稍微多一點?當然,如(亮分rú)果能(néng)在報聽你(nǐ)的(de)下一個(gè)新風視項目中作爲一個(gè)娛樂(y站答uè)性的(de)技術(shù)嘗試也(y湖綠ě)是不錯的(de),做好準備肯定沒錯的(器書de),因爲我們永遠不知道下一從我刻會(huì)發生什(shén)麽。&n員動bsp;

先不說新的(de)語言特性,使用(廠票yòng)回調和(hé) promises 管鐵公理(lǐ)異步 Javascript 至少(吧腦shǎo)得背的(de)滾瓜爛熟吧(ba)。計亮浏覽器(qì)端應用(yòng)跳們加載,以及應用(yòng)間通信策人習略得形成一套自己的(de歌長)觀點吧(ba)。而且你(nǐ)應該知道哪種都煙框架最适合你(nǐ),而不是現農廠在還把時間花在理(lǐ)高公解各種框架的(de)實現原理(你廠lǐ)和(hé)該選擇哪種框架上(s冷數hàng)。 得照
模塊化和(hé)構建工(gōng)具微從 

毫無疑問,模塊化是構建 Web 客戶端應用(yò店新ng)的(de)基石。回到知國(dào)2012年,關于使用(yò多熱ng)哪種模塊化(ADM/CommonJS)方案構建浏覽器(qì)端聽看應用(yòng)還存在很多争論。而最近慢(m房服àn)慢(màn)火(huǒ畫拿)起來的(de)UMD則在保證代碼可(kě)複用(yòng)的(de化些)前提下嘗試避免這樣的(de)問門雪題。 其實也(yě)沒什(shén)麽妹也好争得,畢竟這倆玩意兒之間也(yě)就村跳差幾個(gè)字符吧(ba什但)? 

我覺得類似這樣的(de)争論其車低實并不都(dōu)需要有(yǒu)到吧一個(gè)答案,這也(yě)是我覺得從2012習關年到(dào)現在我們發生的(物姐de)最大(dà)的(de)轉變,當黑門然,也(yě)許隻是我自己這麽認爲金裡。因爲我覺得與其說“我再也(樹裡yě)不用(yòng) A他問MD 了”之類的(de)話(huà嗎樹),倒不如(rú)多去討些爸(tǎo)論 “在開(kāi)發和(拍村hé)打包過程中使用(yòng) Co答光mmonJS 和(hé) npm 遇到(公化dào)的(de)各種難題” 來的(de)更有和不(yǒu)價值。 

雖然很感激RequireJS曾經對模塊化做出的(de)貢獻,不過現在我開(k照熱āi)始有(yǒu)點迷男近戀webpack了。 webpack 的(de)構建配家議置比 RequireJS 更加易于理(l開坐ǐ)解,也(yě)更具訪問性。通姐船過它的(de)熱(rè)工還插拔特性和(hé)内置的(de)本地(dì)河錯靜态服務器(qì)可(kě)以讓發布更加便捷國風。它并不強制(zhì)要求使用(yòng) A東她MD 或者 CommonJS – 兩個可亮(gè)它都(dōu)支說那持。它還實現了一大(dà)堆加載器(從坐qì),用(yòng)來完成常見的(de)書北繁瑣工(gōng)作。Browserify也(yě)值得去了解一下,不過我個(gè)人(工議rén)認爲它比 Webpack 落後很多。一些購事靠譜的(de)朋友(yǒu)告分從訴我說systemjs也(yě)是這個(gè)領相也域的(de)競争者,不過我還沒有(yǒ通計u)用(yòng)過,而且它的(de)文(w家低én)檔爛的(de)我連看都(dōu)不想看。不長理過我覺得它的(de)好基友(yǒu)&她民nbsp;jspm (包管理(lǐ)器(qì))比較有(yǒu)趣,書器jspm 可(kě)以讓你(nǐ)從各種包管明商理(lǐ)服務器(qì)志劇加載你(nǐ)需要的(de)各種組件(jià又明n),(組件(jiàn)歌機必須是符合 ES6, AMD, Commo林行nJS and globals水水 規範的(de)),包括 npm, git自理hub 等,但(dàn)是我對森什于這兩個(gè)玩意的(de)合體還是有(y線路ǒu)點不太理(lǐ)解。啊,還有(yǒu為內),雖然我說了這麽多關于模塊化之外的地冷(de)内容,但(dàn)我從來湖近沒想過放(fàng)棄 AMD,我們邊走邊看又林吧(ba)。 

我覺得如(rú)果要停止對模塊化和(hé)構建家行工(gōng)具的(de)争論,形成統一的(些身de)模塊化系統,并且在這個(gè)系統裏面鐘醫,任何項目的(de)代碼都(林如dōu)可(kě)以共享,而水店且還不需要 UMD 這樣額外的(de有子)補丁工(gōng)具,我們還兒在有(yǒu)很長的(de)短鐘路(lù)要走。理(lǐ)想狀況下,E但友S6 modules 的(de)對妹到(dào)來會(huì)解決這些問習公題,不過在這一天到(dà醫到o)來之前,類似 UMD 冷謝之類的(de)轉換器(qì)會(h山門uì)填補這些空缺,不過貌似這樣做我們紙從又(yòu)把事情變得複雜技問了,好像我們也(yě)總喜歡把事情弄務嗎得複雜。 

與此同時,前端開(kāi)發人(rén)員也(紅裡yě)需要對構建工(gōng)具,各種模塊化對業系統有(yǒu)自己的(de)聽外見解和(hé)知識儲備。不管是好是笑快壞,根據 Javascript 現在的(d水開e)進度,你(nǐ)的(d校兵e)模塊化策略會(huì)對你(門多nǐ)的(de)項目有(yǒu)比較大(dà器輛)的(de)影響。 

測試 

客戶端的(de)代碼測試變得越來越習懂普遍,最近也(yě)誕生了一些新的(de)測試藍爸框架:KarmaIntern。我發現基于 promise 的這吧(de) Intern 的(de但煙)異步測試方法相(xiàng)當優雅。不過可(k水不ě)能(néng)是因爲習(x老南í)慣,我大(dà)多數情況下還是用(這綠yòng) Mocha 寫測試用(yòng)例自兵。 

測試的(de)主要障礙其實是前自習端開(kāi)發者的(d中讀e)代碼編寫方式。我在2熱樂012年發表過一個(gè)關于《編寫可可這(kě)測試的(de)Javascript》下載地(dì)址的(de)演講,緊接著(zhe)幾個(g多大è)月(yuè)後又(yòu)發線窗表了一篇相(xiàng)關的(de)文(腦物wén)章(zhāng)。 南秒

測試的(de)第二大(dà)障礙是工(gōng)間服具。Webdriver 是一個(湖北gè)艱難而巨大(dà)的(de)工(gō司光ng)作。目前在各個(gè)浏覽器(一自qì)端做持續集成的(de) UI 自動化測試基你讀本上(shàng)是不可(kě)能(nén時黑g)的(de),更不用(yòng我劇)說移動端了。我們仍然停留在局限于某一小(xi村習ǎo)部分(fēn)浏覽器(qì)和(h明服é)設備上(shàng)商分做輕量級的(de)自動化功能(néng)測試近輛,盡我們所能(néng)去研究怎樣快刀少速,低成本的(de)進行(xíng)這種土低測試的(de)階段。 

如(rú)果你(nǐ)對如(rú金分)何改進代碼的(de)可(火到kě)測試性感興趣的(de)話(h好雜uà),那麽唯一一本最值得看的(de)書(sh影拿ū)是 Working Eff舞得ectively wit還裡h Legacy Code (中譯版:《修改代碼的(de)行間藝術(shù)》。作者Michael Feathers定義了“遺黃那留代碼”的(de)概念:任何未經測器麗試的(de)代碼都(dōu)是遺留音月代碼。在測試領域,最基本的(de)要素就是上(畫大shàng)面這句話(huà),盡管你(nǐ)可友公(kě)能(néng)不這麽認爲。&喝月nbsp;

流程自動化 

你(nǐ)首先會(huì)想到(dào)聽人Grunt,這也(yě)是理(lǐ)所當然的(de低劇)。而 Gulp和(hé)Broccoli的(de)自動化構建方式也(yě)别具匠很動(jiàng)心。我沒用(yòng小器)過Broccoli,隻玩過Gulp,我也(yě新看)開(kāi)始意識到(dào)Grunt對中靜于依賴其他(tā)服務的(de)複雜數大任務的(de)自動化工(gōng)作存在局限性白志,尤其是當這種任務每天需要運行(xíng)上(s議銀hàng)千次的(de)時候。 拍玩

Yeoman是在我寫完2012年的(d業服e)那篇文(wén)章(zhāng)僅僅4多在5天之後發布的(de),我承認當時我校我并沒有(yǒu)及時去嘗試一下問為。不過最近我開(kāi)始啓動一樹算些新項目,這些新項目有(y弟術ǒu)兩個(gè)特點 
a) 這些項目都(dōu)是從零開(kā靜地i)始 
b) 嘗試用(yòng)一些不同的(de)草金技術(shù)方案,試圖技慢通過這種方式找到(dào) Ba廠土zaarvoice(提供第三方點評服務資用)上(shàng)第三方 JS謝南 應用(yòng)的(de)規範化的(de)花林開(kāi)發方式。 
Yeoman 在這兩方面做的(雨街de)都(dōu)很好。一個(gè)簡單金話的(de) yo react-webp資我ack 命令就可(kě)以爲你(購可nǐ)初始化好你(nǐ)的(de)項目,然後小煙各種你(nǐ)想要的(d河謝e)玩具也(yě)都(d服件ōu)應有(yǒu)盡有(yǒu):生成測試用通北(yòng)例,本地(dì)靜态服務器(他下qì),hello wo錯上rld 入門程序,等等等等。如(rú)不又果 React 和(hé) 來得webpack 不是你(她愛nǐ)想要的(de),也(yě長明)許你(nǐ)會(huì)冷明在 Yeoman 的(de) generator我答s(項目生成器(qì))裏友海面找到(dào)一個(gè)你(nǐ)靜海想要的(de),當然,自己自定義一個(gè)少放這樣的(de)構建包也(yě)是比較容易報書的(de)。 

鑒于Yeoman隻是一個(gè)在項目友店開(kāi)始時才會(huì)用(yòng)費民到(dào)的(de)構建工(gōng來外)具,并且鑒于我們并不是錢謝總是做新項目,所以大(dà)多情況下了解一下黑訊就夠了。除非,你(nǐ)也(yě)想去規範整黃能個(gè)項目開(kāi)發過程,那麽它可這他(kě)能(néng)會(huì)更有(yǒu分就)價值一點。 

Broccoli已經得到(dào視去)了 ember-cli 的長上(de)采納,我覺得他(tā)們街費的(de)配對可(kě)能(néng山物)會(huì)有(yǒu)一個(gè)新名火年字,這樣在未來才比較方便和(hé) Gr算店unt /Yeoman 對睡區抗。而 Grunt 和(hé) Yeoman 子看的(de)開(kāi)發進度也(yě)銀線放(fàng)緩了,所以未來會聽新(huì)發生什(shén)麽,我們還是靜她物觀其變吧(ba)。 

代碼質量 

如(rú)果你(nǐ)像我一身相樣,一看見違反代碼規範的(de)代碼時就又妹開(kāi)始抓狂,那麽 JSCS 和(hé)&為光nbsp;
ESLint 就是老天賜給你(nǐ)的(de)禮公我物(wù),而2012壓根就沒這些暗子玩意。他(tā)們都(dōu)提供了自定義算門代碼規範的(de)方式,并且可(k數高ě)以在代碼提交前對你(nǐ)的(de)唱信代碼做自動化校(xiào什劇)驗。這讓我想起了… 

Git 

從2012年到(dào)現在,github 的相她(de)使用(yòng)流程并沒有(船匠yǒu)發生很大(dà)的(de)變下到化,比如(rú)在 pull request 光東頁面連個(gè)分(fē行頻n)支名都(dōu)沒有道謝(yǒu)(隻是惡搞一下)。 來從

你(nǐ)應該非常清楚和(hé)鐘多流暢地(dì)使用(yòng)功河文能(néng)分(fēn)支(fe紙厭ature branches),男間 使用(yòng) rebase 合并在理别人(rén)的(de)代碼幹活,使用(yòng道長)交互式 rebase 命令和(現遠hé) squash 合并提交記錄,或者輛麗盡可(kě)能(néng)細顆粒度的(de)劃分近購(fēn)項目内容,避免引起代碼沖突。另一中腦個(gè)可(kě)用(yòng)月男的(de) Git 工(g民信ōng)具是鈎子,具體而言,就是你(醫校nǐ)可(kě)以在 push 前志信,commit 前,執行(xíng)你(n麗外ǐ)的(de)各種測試用(y請雨òng)例,檢查代碼質量。你(nǐ)可(kě)雜愛以自己寫鈎子,也(yě)可說少(kě)以使用(yòng) ghooks ,河內由于 ghooks 使鈎子工(請員gōng)作變得非常簡單,所以你(n畫作ǐ)簡直沒有(yǒu)理(lǐ)由不用(道如yòng)它。 

客戶端模闆 

這可(kě)能(néng)是我在2你國012年的(de)那篇文(wén)章(zhān不信g)中寫的(de)最爛的(de)内容了,某種意得暗義上(shàng)的(de)“海現爛”。客戶端模闆還是很有(yǒu)價值的弟場(de),而且它已經被内置到(dào睡關) ES2015 裏面了,我公這不僅僅隻是一件(jiàn)好事而已。這些線話年也(yě)有(yǒu)一錯樹些慘重的(de)教訓,不少(站家shǎo)團隊把所有(yǒu)的(de)渲染工做船(gōng)作全部丢到(dào)浏覽內可器(qì)端去做,結果産生了嚴問事重的(de)性能(néng)村都問題,所以 “在浏覽器(qì)端渲染兵間生成所有(yǒu) HTML” 的(de)做法費對理(lǐ)所當然的(de謝麗)被摒棄了。 而更爲聰明(míng)的(在我de)做法則是,把 HTML 生成放(fàn火文g)在服務器(qì)端,關紙或者通過預編譯的(de)方式,先将模闆做爲靜喝費态資源儲存起來,在需要時快速的(請海de)編譯成 HTML,需要更也森新時也(yě)可(kě)以直接在我站客戶端更新模闆。 

這裏會(huì)有(yǒu)一些新的(de)展數窗望,不僅是對我自己,也(yě我鐘)是對所有(yǒu)人(ré有拿n),當你(nǐ)在考慮性得友能(néng)問題時,也(y從計ě)許沒必要把自己完全限定在浏覽器(qì)工市範圍内。所以,這又(yòu)南他讓我想起了…… 

原文(wén)鏈接:A Baseline f訊嗎or Front-End ‘JS’ Devel樂件opers: 2015 

譯文(wén)來自:知乎——前端外刊評論