1. 程式人生 > >vue前端開發那些事(1)

vue前端開發那些事(1)

  如上圖所示,用vue開發一個小型網站所涉及到的知識點。這只是前端部分已經這麼多了。接下來我分解開來說。
  
  1、Node
  
  當我們開發vue專案的時候,首先要安裝Node.js,那麼我們即使當時不理解為什麼,但是專案完成後,應該抽個空,理解下。有兩個問題:
  
  a、什麼是Node?
  
  b、Node能做什麼?
  
  c、它與Vue專案有什麼關係?
  
  Node是一個伺服器端框架,它所使用的語言是前端非常流行的JavaScript,它集成了JavaScript的直譯器 chrome v8——chrome瀏覽器底層使用的引擎。js可以執行在伺服器端,這是一個突破,以往我們認為js離不開瀏覽器。
  
  Node採用事件驅動模型,它能響應併發量在瞬間很大的應用程式。傳統的伺服器框架,如IIS和Apache,當客戶端發起一個http請求時,伺服器端就得分配一個執行緒去響應。因為併發量大,所以瞬間得很多個執行緒啟動,我們知道一個執行緒會佔用系統一定的資源。當一臺伺服器不夠使用的時候,那麼就得多加幾臺。成本自然就很高。node恰好在這方面是擅長的,它對使用者的大量的請求,首先快取到一個佇列裡,然後再處理。也就是說,它的處理不會阻塞。
  
  2、npm
  
  npm是基於node開發的一個js包管理器。在vue中,我們需要很多第三方的js模組,用npm管理起來,特別方便。npm install 命令用的比較多,它用來安裝。當然也有解除安裝、更新等其它命令。
  
  3、webpack
  
  webpack是做什麼的呢?它負責編譯打包(專門針對js模組打包的),這個工作量比較大。而Vue專案中有css檔案、圖片、ES6(比較新的js版本)、vue元件等等。這就需要webpack在打包之前,先轉換這些檔案。於是就出現了各種Loader,這些Loader是由webpack提供的。ES6,某些瀏覽器不支援,所以通過一個叫Babel的東西(一個js的編譯器)來編譯,轉換成傳統的js語法。
  
  我們使用了很多js模組,在模組化概念出現以前,我們應用某個庫,直接引用js檔案即可。如果引用順序不對,那麼某些功能就會出錯。比如說,我要用jquery form提交,先引入jquery、然後引入jquery form.js 這樣 ok,但是順序反了的話,就出問題了。當模組化流行以後,各個模組之間的依賴關係比較複雜,人工維護顯然效率低,還容易出錯,這時,webpack應運而生。
  
  webpack的配置項比較多,比較關鍵的一點是要弄清楚配置中的路徑。它的打包需要知道包的物理路徑,而我們專案中使用相對路徑,所有它用Resolve對映,相當於.net 中的Server.MapPath方法。有兩個點,我覺得對開發者來說,非常方便。1、程式碼更改時,立即編譯 2、當編譯後,頁面立即重新整理過來了。 多麼happy的功能啊。要不,你還得執行編譯的命令以及不停地F5。這一切得益於兩個東東:webpack-dev-middleware和 webpack-hot-middleware。關於它們的實現,有興趣的同學,可以在網上檢視。
  
  4、ES6
  
  在網上搜了一張圖,覆蓋了好多知識點。如下圖所示:
  
  4.1 與以往版本比較,變化比較大的有,模板字串,它告別了js字串和變數拼接的寫法,尤其在jquery時代,經常操作dom,比如ajax成功後,需要在一個div裡面載入結果(html程式碼)。它和c# 6中的字串插值類似,當橫向比較的時候,你發現會非常有意思。
  
  這是我在網上擷取的一個例子。你可以認為這些是語法糖,但是無論從可讀性,還是簡潔性(優雅),都比format強很多。再看看ES6中的模板字串:
  
  它們是多麼的相似。請問,中國處於“大唐”時期,那麼西方處於什麼時代?這只是一個橫向比較的思維。
  
  4.2 塊級作用域 let
  
  什麼是塊級作用域?比如for迴圈,在迴圈體內宣告的變數,按道理,在體外是不能訪問到的。但是js是個例外,js的var宣告的變數,在程式碼解釋執行的時候,會提到最前面。所以這一點往往被一些開發者所詬病。現在出了個let,這本沒有什麼大驚小怪的,前端的語言語法在向伺服器端靠近,比如常量宣告const,c#中也有,class這就不用說了。
  
  4.3 箭頭函式
  
  js中的箭頭函式,不就是和c#中的 Lambda 表示式一樣嗎?
  
  var materials = [ www.mingcheng178.com 'Hydrogen', www.michenggw.com/ 'Helium', 'Lithium', 'Beryllium' ];
  
  materials.map(material =www.mhylpt.com/> material.length); // [8, 6, 7, 9]
  
  c#中的委託的用意不就和js中的回撥一樣嗎?在js中傳遞函式,很普通(function名稱還是一個變數),但c#中傳遞一個方法,需要委託。
  
  4.4 解構賦值
  
  這個與python的有點像。
  
  4.5 模組化
  
  import 和export,目前瀏覽器相容性不是很好,用的時候,使用babel。
  
  好了,在進入vue開發前,先鋪墊一些知識點。