Vue.js 核心精要實戰解析
課程簡介
前端框架領域,Angular、React、Vue.js 三足鼎立,而 Vue.js 因其效能、通用、易用、體積、學習成本低等特點深受廣大前端們的追捧,並吸引了一大批前端初學者。作為 Vue.js 的入門教程,此達人課共計16篇文章,涵蓋了所需瞭解的核心基礎知識,並通過小小電商網站的搭建,在實戰過程中帶大家快速掌握 Vue.js。
本課程共包含三大部分。第一部分(第1-2篇)帶你初步認識 Vue.js,包括 Angular、React、Vue.js 三者對比、框架選擇標準、Vue.js 技術優勢解析及基礎語法初探。
第二部分(第3-7篇)基礎功能演練,包括開發環境的搭建,Vue.js 例項的建立、條件渲染與列表渲染、元件開發、路由與互動等核心功能的解析,為後面的實戰部分打好基礎。
第三部分(第8-16篇)開發進行時,通過專案實戰開發,帶你更直觀深入地瞭解 Vue.js 的各個功能,並高效地運用到實際開發專案中,全方位提升你的技術實力與思維方式。同時還將瞭解到專案從立項、需求分析、功能開發、打包釋出整體開發流程。
作者簡介
羅忠浩,現就職於某網路公司擔任前端工程師,CSDN 部落格專欄作者,APICloud 論壇版主,長期活躍於各大論壇,擅長前端開發、微信開發、App 開發,創辦有公眾號《前端成都》。畢業於中國工程物理研究院工學院,曾在校擔任助教。
課程內容
第01課:關於 Vue.js 的那些事兒
從去年開始,在各大論壇技中,與 Vue.js 這一相關詞語的內容爆炸式增長,在前端技術增速中獨領風騷,迅速成為前端三巨頭之一。記得在某個社群中有人這樣介紹三巨頭“來自 Google 的 Angular,來自 Facebook 的 React,來自開源社群的 Vue.js”,Vue.js 的成功是大家有目共睹的。
回顧前端框架的發展歷程,2006年 JQuery 釋出至今十一年過去了,它的輝光也隨之過去了,當前版本的 JQuery 在未來不會再擁有曾經的地位,2012年之後隨著 W3C 的推進一批新性質的框架出現了,他們一步一步佔據了 JQuery 同時期框架的位置,許多框架就此在歷史的長河中隱祕起來。
Vue.js 在2016年崛起,NG 也釋出了全新的版本2,前端的世界彷彿回到了東漢末年三國鼎立時期(React Native、Vue.js、NG)。前端這條路,一旦離開就不在容易回來跟上步伐,爆炸式的增長讓我們不得不時刻準備著迎接新的一波潮流,未來怎樣誰也不知道,但是現在,我相信 Vue.js 就是一把舉世無雙的利刃,能夠幫助我們在前端的路上劈荊斬棘。
Vue.js 及相關資訊介紹
Vue.js 的創始人是國人尤雨溪。關於為什麼開發這樣一款框架,網上也有各種說法。
2012年初,36Kr 有一篇文章對作者進行了相關報道,其中有這麼一句話:“Evan 希望能通過這個舉動引起科技公司的注意,向他伸出橄欖枝。”,並附上了作者尤雨溪的微博、Twitter 與個人網站。作者的做法,我覺得大家應該借鑑,掌握好 Vue.js,讓你心儀的公司注意到你。
針對知乎上關於 Vue.js 的一個提問,尤雨溪的回答說出了最初的開發初衷,即“做 Vue.js 的初衷很單純,不是為了賺大錢,不是為了成為大神,也不是因為我發現了什麼不得了的創新點。我只是想做一個我自己會喜歡的框架。很巧,我把我想要的東西做出來以後,也有很多其他人喜歡,所以使用者越來越多。我從沒說過,也不認為 Vue.js 比所有其他框架都好(我一直的觀點都是開發者偏好的多樣性使得多框架/語言的共存有益無害,甚至是必要的) 。”
說到此,也希望大家在學習框架或者技術時不要帶著主觀意願去評判。當在學習 Vue.js 的時候,網路上充斥著各種各樣的帖子,很多帖子都在講述 Vue.js 如何如何的差,哪裡是抄襲的。我希望做程式開發的人都應該是理智的,不應該帶著情緒去對待一個技術性的事物,尤其是它和你本身就不存在什麼關聯。有一句話叫做存在的既是合理的,如果它不合理,早晚會被時間淘汰掉,技術之間的替換更新是不可避免的,請不要因為你對於一門技術的熱愛去詆譭另一門技術。
接觸 Vue.js 之前,我使用的是 Angular。通過一段時間的使用,感覺 Vue.js 更加簡單輕便,在中小型專案開發中比 Angular 可能更加適用,於是在後來的專案中我放棄了 Angular 轉戰 Vue.js。
基於一段時間的深入研究,也積累了很多實戰經驗,希望通過該達人課與大家分享。該課程以實用為主,不會過多地深入講解原理,主要面向已有前端開發基礎的研發員。如果您缺少前端基礎,可能在整體上會吃力許多。
Angular、Vue.js、React 三者的區別
曾有很多人問我關於Angular、Vue.js、React 三者的優劣,我覺得三者並不存在優劣,而是具有不同的特性,再次為大家分析下它們與 Vue.js 的一些共同點與不同點。
React 與 Vue.js 都採用虛擬 DOM,而且它們的核心功能都在核心庫中,其他類似路由這樣的功能則由其它庫進行處理。
React 在我看來並非一個純粹的 MVVM 框架,它有著一個龐大的生態系統,它比 Vue.js 優秀,因為它脫離了一般框架的範疇,但是 Vue.js 並非在它面前一無是處。事實上,Vue.js 在許多時候都是佔據優勢的,因為 Vue.js 較 React 而言要輕得多。React的整體都是由 JavaScript 功能來實現的,這對於一般的前端開發者而言,把 CSS/HTML 都融入 JavaScript 不是那麼容易接受,而 Vue.js 則是基於傳統的 Web 技術進行擴充套件,這無疑更能讓使用者接受。
Angular1 與 Angular2 在我看來並非同一個框架,他們在語法上與 Vue.js 幾乎一致,所以很多人都說 Vue.js 是抄襲Angular,對於這樣的帖子看得太多,我認為就是 Vue.js 早期的思路,部分確實來源 Angular1,這樣的問題也就不想過多闡述,仁者見仁智者見智。
Vue.js 在許多方面沒有像 Angular 一樣深入開發,但也保證了基礎的功能完善。對於 Angular 的全面帶來的龐大, Vue.js 選擇了不同的方向, Vue.js 很多時候要比 Angular 快,還有對於 Angular 的髒檢查機制帶來的效能問題,這也是 Vue.js 不用去管的。
為什麼選擇 Vue.js
首先我們談談 Vue.js 的諸多優點。
1.不存在依賴關係;
2.輕便(25k min+gzip 72K min);
3.適用範圍廣(大中小型專案,PC,移動端,混合開發);
4.本土框架,社群非常活躍,對於國產的大家的熱情度非常得高(主要還是東西本身好);
5.學習成本低,語法升級平滑(Anguler1升級到2算得上新學一門語言了);
6.雙向資料繫結(所見即所得);
7.語法簡潔。
接下來,我們研究一些 Vue.js 的語法。
1.如何建立一個 Vue.js 例項。
var vm = new Vue({ // 選項})
就是這麼簡單,new 一個 Vue.js 物件。
2.如何新增資料。
var vm = new Vue({ data: { text:"這是文字!" }})
簡明扼要,容易讀懂, Vue.js 的資料都儲存在 data 中。
3.雙向資料繫結的實現。
- Anguler1實現資料雙向繫結的方式:
<body ng-app="myApp"> <div ng-controller="myCtrl"> <span>{{ inputData }}</span> <input type="text" ng-model="inputData "> </div></body><script>var myModule = angular.module('myApp', []);myModule.controller('myCtrl', ['$scopp', function($scope) { $scope.inputData = '';]);</script>
- Vue.js實現資料雙向繫結的方式:
<body> <div id="app"> <span>{{ inputData }}</span> <input type="text" v-model="inputData "> </div></body><script>var vm = new Vue({ el: '#app', data: { inputData : '' }})</script>
對比 Anguler1 整體一致,Vue.js 的更加簡潔一些,v-model 將資料與 DOM 繫結,{{}}兩個花括號將資料直接展示為文字,你修改 input 框的內容,上面所展示的就會跟隨改變,就是所謂的,所見即所得。
4.寫一個簡單的事件。
<div id="app"><button v-on:click="inputData += 1">Add 1</button><p>The button above has been clicked {{ inputData }} times.</p></div><script> var vm = new Vue({ el: '#app', data: { inputData : 0 } })</script>
每次點選 Add 1 下面展示的內容就會增加1,通過 v-on:click 來繫結點選事件,與原生的 onclick 效果一致,當然原生的 onclick 不支援上面的寫法。你也可以選擇將 click 繫結一個函式,像下面這個。
<div id="app"><button v-on:click="addOne">Add 1</button><p>The button above has been clicked {{ inputData }} times.</p></div><script> var vm = new Vue({ el: '#app', data: { inputData : 0 }, methods: { addOne:function () { this.inputData++ } } })</script>
函式的寫法與原生只有名字順序變化,但是其中有非常重要的一點,在 Vue.js 中的 this 與原生的 this 所指的並不相同,Vue.js 中的 this 指向的是 vm 這個 Vue.js 例項,在例項中呼叫 data 中的資料直接使用 this.Dataname 就可以了(dataName資料名),呼叫函式也是相同的方法 this.functionName(functionName函式名),關於 this 還存在許多其他需要注意的地方,在後續的課程中會為大家講解。
methods 是在例項中用來存放函式的地方,寫在 methods 中的函式都可以通過上述的 this.functionName 呼叫,也可以直接繫結在 DOM 元素上,通過 v-on:click="functionName" 就繫結成功了。例項 vm 中的 el 就是例項掛載的元素 ID,要與上面 DOM 的 ID 保持一致,也就是說,你掛在哪個 DOM 上,你的例項作用範圍就在這個 DOM 元素內。
當前,前端開發實際過程中對瀏覽器的相容性要求不再像以往那麼苛刻,IE8 及以下的版本已經被大多數人放棄, Vue.js 、Angular、React三者中只有 React 相容 IE8。所以在我們工作中進行考慮的時候,對於瀏覽器的相容在大多數的專案中都沒有苛刻的要求。
使用框架開展一個專案的時候,需要考慮哪些方面?
1.效能
如果一個網站在效能方面存在問題,它將會損失超過一半以上的使用者。
對於框架效能,你可以在網上查詢到各類測試,你可以瞭解框架的程式碼結構、邏輯處理,判斷是否能夠滿足你對效能的需求。
2.擴充套件性
對於一個需要長期維護的專案而言,經常會有各種各樣的功能新增進來,這時擴充套件性就顯得尤為重要,如果你在前期選擇了一款滿足前期的框架,但後期你需要使用某個外掛來完成某個功能,或者基於什麼完成一個功能,這時候你發現網上並沒有檢索到相關內容,內心是否充滿了心塞。
3.維護性
一個專案的生命週期不是三天兩天,而前端的發展則是爆炸式的。在你選擇框架的時候是否考慮過官方在後續的一段時間是否會一直對框架進行更新維護?如果不確定,是否已經有了官方放棄維護後的解決方案?
4.相容性
這裡的相容性指的不是瀏覽器相容,而是框架與其他框架及工具的相容,使用這個框架對於你的開發環境是否有影響,對於你的開發 IDE 是否有影響。
Vue.js 作為一款當前十分流行的框架,在你選擇它的時候其實以上內容都不需要你思考太多,很多過來人用他們的經驗告訴你這是可行的。你只需要去判斷,Vue.js 是否適合你的專案。
個人總結 Vue.js 適用具有以下性質的專案:
對瀏覽器相容要求不高,不需要相容至IE6-8;
SPA開發;
對效能較高要求;
元件化。
總的來說,如果你是一個 MVVM 框架新手,那麼 Vue.js 就是你最好的進階工具,如果你是一個已經掌握了其他 MVVM 框架的老手,那你會發現 Vue.js 更加簡單輕便。
Vue.js 是一款適合每個人的框架,個人看來它的適用範圍在 MVVM 框架中是最廣泛的。
第02課:入門前的概述——初識 Vue.js
閱讀完上一篇文章,相信你對 Vue.js 有了整體認知。如果它引起了你的興趣,接下來我將帶你深入研究它。
學習 Vue.js 之前的基礎準備
在 Vue.js 官方文件中有這麼一段話。
官方指南假設你已有 HTML、CSS 和 JavaScript 中級前端知識。如果你剛開始學習前端開發,將框架作為你的第一步可能不是最好的主意——掌握好基礎知識再來!
這句話意味著,學習 Vue.js 之前,首先要有合格的 HTML、CSS、JavaScript 基礎。之後去閱讀官網文件,瞭解 Vue.js 有什麼,能做什麼,也可以深入學習瞭解它們為什麼要這麼做以及是怎樣實現的。
當你對 Vue.js 有了一定的認知,在學習過程中又有很多不清楚的地方時,可以結合別人的教程進行學習。
後續內容將會以讀者已對官網文件進行過學習為基準進行講解。你無需全部掌握官網文件中的內容,只需系統的看過一遍,知道 Vue.js 是什麼,包含什麼即可。本系列教程並不會和官網文件一樣對 Vue.js 的功能進行挨個講解,所以需要大家自己去了解某些東西。
Vue的模版語法
學習任何框架都需要遵循它的語法,現在我們就來談談關於 Vue.js 的語法。
Vue.js 使用了基於 HTML 的模版語法,允許開發者宣告式地將 DOM 繫結至底層 Vue.js 例項的資料。 Vue.js 的核心是一個允許你採用簡潔的模板語法來宣告式的將資料渲染進 DOM 的系統。 結合響應系統,在應用狀態改變時, Vue.js 能夠智慧地計算出重新渲染元件的最小代價並應用到 DOM 操作上。
這段話是官網對於 Vue.js 語法的介紹,簡單來說,就是Vue.js的語法都是寫在 HTML 程式碼上的,依靠它提供的語法,就可以實現對 DOM 的渲染,如果你的內容發生了改變也會自動渲染新的內容。接下來,我們看下幾個重要的語法點。
- 文字插值:相當於將在 JavaScript 中定義的變數寫到 HTML 中,用{{}}兩對大括號將你的變數名包住,渲染的時候它就會自動將變數所對應的常量渲染到HTML中。請見下面程式碼示例。
<div id="app"> <div>{{ message }}</div></div><script>new Vue({ el: '#app', data: { message: '初識Vue.js' }})</script>
- 輸出程式碼:v-html,這個與原生的 innerHTML 插入功能類似,v-html="HTMLCode",將 HTML 程式碼放置在變數中,渲染時 Vue.js 會將變數中寫好的結構渲染至頁面中。請見下面程式碼示例。
<div id="app"> <div v-html="HTMLCode"></div></div><script>new Vue({ el: '#app', data: { HTMLCode: '<p>vue教程之語法模組</p>' }})</script>
- 屬性繫結:在 Vue.js 中可以使用 v-bind 來繫結屬性,如 id、class、src 等等,請見下面程式碼示例。
<div id="app"><div v-bind:id="domId"></div></div><script>new Vue({ el: '#app', data: { domId: 'userImg' }})</script>
看到這裡,如果你覺得這個類功能很沒用,還不如直接寫個 id 來的方便。那還請你耐心點,我會在後續的課程將它們的作用都展示出來。
- 表示式:就是 JavaScript 中的表示式,同樣也可以作用於 Vue.js 的語法中,甚至還可以與繫結屬性一起配合使用,請見下面程式碼示例。
<div id="app"> <p>{{5+5}}</p> <p>{{ test ? 'YES' : 'NO' }}</p> <p>{{test.split('').reverse().join('')}}</p> <p v-bind:id="domId +233">{{test}}</p></div><script>new Vue({ el: '#app', data: { test: 1, test: '233233', domId : 'userImg' }})</script>
對於表示式與繫結屬性的使用,再舉一個常用的例子,程式碼如下所示。你可以根據 isActive 的真假來覺得 active 這一 CSS 是否會對所在的 DOM 進行樣式渲染。
<style>.active{ font-size:20px;}</style><div id="app"> <div v-bind:class="{'active': isActive}"> </div></div><script>new Vue({ el: '#app', data: { isActive:true }})</script>
- 指令:指令指的是帶有 v- 字首的特殊屬性,與 Angular 中的 ng- 類似。一般格式為 v-if="show",它的作用是根據表示式來決定指令功能的實現與否,如 v-if="show" 就表示渲染當前DOM,請見下面程式碼示例。
<p v-if="show">當前DOM可見</p>
- 事件監聽:v-on,它的作用就是監聽 DOM 事件,和元素的事件監聽類似,請見下面程式碼示例。
<a v-on:click="doSomething">...</a>
- 縮寫:v-bind 以及 v-on 都可以進行縮寫,功能不會變化,v-bind 縮寫為 :,一個冒號,而 v-on 則縮寫為 @,一個 @ 符號,請見下面程式碼示例:
<a @click="doSomething">...</a><a :href="url">...</a>
看了以上內容,你應該對 Vue.js 的語法有所認識了。在這裡給大家補充一點,語法中表達式的使用,如同我上面的某個例子寫的:
<p>{{test.split('').reverse().join('')}}</p>
模版內使用表示式的初衷是為了提供簡單的運算,但如同上面一個例子,你會發覺它不再是一個簡單的計算,而是要實現一個翻轉字串的功能,這樣的功能我們不應該放在模板內通過表示式來實現,而應該通過類似JavaScript方法來實現,這種方法叫做計算屬性。
舉個簡單的例子,如下。
<div id="app"> <p>正確的順序: "{{ test }}"</p> <p>計算屬性後的順序: "{{ testCode }}"</p></div>var vm = new Vue({ el: '#app', data: { test: 'vuejs' }, computed: { testCode: function () { return this.test.split('').reverse().join('') } }})
而我們一般的方法則是這樣完成的:
<div id="app"> <p>正確的順序: "{{ test }}"</p> <p>執行方法後的順序: "{{ testCode() }}"</p></div>var vm = new Vue({ el: '#app', data: { test: 'vuejs' }, methods: { testCode: function () { return this.test.split('').reverse().join('') }}})
兩者輸出的結果都一樣,在 Vue.js 中,通過這樣的方法進行復雜的邏輯處理以及其它功能的實現。可以將 testCode 理解為方法名,function 裡面就是執行的方法。
但你會發現我們為什麼使用計算屬性而不是方法呢?
涉及到計算部分的時候,計算屬性是基於它們的依賴進行快取的,如果說你的 test 值不變,那麼它就不會去重新執行,只有當值發生了改變,它才會去重新執行一次,其它時候它都是快取的。而方法則會反覆計算處理。二者之間的差距就在於此。
當然如果你不希望快取,那就使用方法來完成這一功能。
如果你想更深入瞭解計算屬性與相關內容,可以檢視官方文件
Vue.js 的語法簡介就到這裡,接下來為大家介紹平時開發中常用的兩種開發模式。
常用的兩種開發模式
第一種是在 script 中引入 Vue.js。
<script src="vue.js"></script>
對於這種模式的使用,一般是專案中涉及到有頁面使用 Vue.js,不是所有而只是部分頁面在使用,而且並不需要大量的第三方 Vue.js 元件。
第二種是利用 vue-cli 搭建單頁面開發,這就是一個完全使用 Vue.js 構成的專案,全套使用 Vue.js。
上一篇文章中的簡單程式碼功能演示,使用的是第一種方法,後續課程中簡單功能演示也會繼續使用第一種方式,而正式開始專案時,將會採用 vue-cli 搭建,下一篇文章將會單獨針對 Vue.js 開發環境的搭建做講解。
下面對兩種方法進行講解。
1.script 標籤引入。
使用這種方法,你只需要下載一個 vue.js 檔案,然後通過 script 標籤引入就可以使用了,非常方便。
<script src="vue.js"></script>
官網在下載 Vue.js 檔案時,有這麼一個提示“重要提示:在開發時請用開發版本,遇到常見錯誤它會給出友好的警告。一般開發的時候,使用開發版本的 Vue.js ,在正式釋出的時候替換為生產版本。
引入 Vue.js 之後,就可以在 script 中例項化一個 Vue.js 物件,程式碼如下。
var app = new Vue({ el: '#app', data: { message: 'Hello Vue!' }})
而在 HTML 中也要有相對應的部分。
<div id="app"> {{ message }}</div>
例項化出來的 Vue.js 物件中,el 就是承載 Vue.js 物件的 DOM 節點的 ID,也就是說例項化的 Vue.js 就只在節點內生效。
一個直接引入 Vue.js 的 HTML 頁面應該是這樣的。
<!DOCTYPE html><html><head><meta charset="utf-8"><title>VUE教程</title><script src="vue.js"></script></head><body><div id="app"> <p>{{ message }}</p></div><script>new Vue({ el: '#app', data: { message: 'Hello Vue.js!' }})</script></body></html>
你可以在官方下載 Vue.js 到本地引入,也可以使用網路路徑。
直接引用的這種方法和用腳手架搭建的 Vue.js 專案是大不相同的,這種方法就像是引用一般的 JavaScript 外掛一樣,引入之後直接使用。
如果你想使用路由和 VueX 或者其他的功能,那麼還需要單獨引入你需要的功能模組的 JavaScript 檔案。
2.vue-cli 搭建
單頁 Web 應用(Single Page Web Application,SPA),就是隻有一個 Web 頁面的應用,即載入單個 HTML 頁面並在使用者與應用程式互動時動態更新該頁面的 Web 應用程式。這是一種目前比較受歡迎的前端開發模式,也是前端人員應當掌握的開發模式。
vue-cli 是一個官方釋出 Vue.js 專案腳手架,它可以快速建立 Vue.js 專案。
使用 vue-cli 構建的就是一個 Vue.js 單頁面專案。它合適於單頁面開發,使用一整套的 Vue.js 來構建你的專案,與第一種單檔案引入是完全不一樣的,整體也要難一些,因為你需要額外學習一部分知識,包括專案的搭建過程,專案的打包釋出,此外,還需要學習瞭解Node.js、npm、webpack等等。
學習 Vue.js,不能再像萌新一樣,一個 HTML 檔案,一個 CSS 檔案,一個 JavaScript 檔案,寫完之後放在伺服器上就完了,你需要對各類工具都有所瞭解,從構建一個專案到打包釋出,都需要工具。
vue-cli 構建的專案,在開發過程中建立的均是 .vue 檔案,程式碼寫在 .vue 中,等打包釋出之後它就會生成 .html、.css、.js 檔案。所以通過腳手架搭建的專案,需要使用 Node.js。
一個 .vue 檔案的結構如下。
<template> <div> {{demo}} </div></template><style> div { background-color: #ff0000; }</style><script> export default{ data () { return { demo: '這個是Home模板頁' } } }</script>
template 模版中裝的是 HTML 程式碼,style 中裝的是 CSS 程式碼,script 中裝的是 JavaScript 程式碼,這裡的程式碼有特殊的格式,與一般 JavaScript 檔案中的寫法有所差異,script 中的內容與單檔案引用中 script 裡也有所不同,大家需要注意它們之間寫法及內容的區別。template、script、style 在.vue 檔案中都是具有唯一性的。
本文為大家介紹了學習 Vue.js 之前需具備的前端知識、Vue.js 的模版語法及兩種常用的開發模式,下一篇文章將正式帶大家開始 Vue.js 實戰開發之旅。
第03課:開發前期準備——開發環境的搭建
讀完上一篇文章,相信你對 Vue.js 有了整體瞭解,且知道了 Vue.js 有兩種開發模式,一種是直接引入 JavaScript 檔案,另一種則是使用 vue-cli 構建專案。接下來,本文將帶你開啟 Vue.js 實戰開發的第一步:搭建你的開發環境。
搭建專案前需要做的準備
子曰:工欲善其事,必先利其器。要做好一件事,準備工作是少不了的。
在做 Vue.js 開發時,大家需要了解並安裝以下開發工具。
1.Node.js
Node.js是一個基於Chrome JavaScript執行時建立的平臺,用於方便地搭建響應速度快、易於擴充套件的網路應用。Node.js 使用事件驅動,非阻塞 I/O 模型而得以輕量和高效,非常適合在分散式裝置上執行資料密集型的實時應用。
它是前端框架,後臺語言。對於Node,大家不用深入研究只需會安裝配置即可,可參考此教程。
2.npm
npm 是隨同 Node.js 一起安裝的包管理工具,能解決 Node.js 程式碼部署上的很多問題,常見的使用場景有以下幾種:
從 npm 伺服器下載別人編寫的第三方包到本地使用。
從 npm 伺服器下載並安裝別人編寫的命令列程式到本地使用。
將自己編寫的包或命令列程式上傳到 npm 伺服器供別人使用。
3.webpack
本質上,webpack 是一個現代 JavaScript 應用程式的模組打包器(Module Bundler)。當 webpack 處理應用程式時,它會遞迴地構建一個依賴關係圖(Dependency Graph),其中包含應用程式需要的每個模組,然後將所有這些模組打包成一個或多個 Bundle。
它就是一款模組載入器兼打包工具,在開發過程中,需要依靠它才能將內容呈現在你面前。
4.vue-cli
vue-cli 腳手架構建工具,用來快速構建 Vue.js 專案。
以上內容推薦安裝最新版,以避免出現一系列問題。
如何確認自己的電腦是否安裝了對應的工具?
在命令提示符中輸入:工具名稱 + v,如果已經安裝它,就會彈出對應的工具版本,如:
node -v
搭建開發環境
如果你已經做好了上述準備,那就跟著我開始完善我們的開發環境吧,主要包括以下四步。
1.安裝 Node.js;
2.基於 Node.js 安裝npm(淘寶映象);
npm install -g cnpm --registry=https://registry.npm.taobao.org
3.安裝 webpack;
cnpm install webpack -g
4.安裝 vue-cli 腳手架;
npm install vue-cli -g
新專案的建立
1.開啟存放新建專案的資料夾。
首先使用 CMD 開啟新建專案要存放的檔案位置。具體步驟如下。
開啟開始選單,輸入 CMD,或使用快捷鍵 win+R,輸入 CMD,敲回車,彈出命令提示符。
開啟之後路徑預設為“C:\Users\Administrator>”。
如果你的檔案不在C盤,請輸入碟符+":",如“D:”。
它會進入D盤下,接著輸入CD+空格+檔案路徑,如“cd myWork\demo”。
2.根據模版建立新專案。
在當前目錄下輸入“vue init webpack-simple 專案名稱(使用英文)”。
接下來的設定預設全部敲回車,最後作者 Author 寫上你的名字就OK了。結果如下圖所示。
- Project name demo:專案名稱為demo,專案名稱一定要是英文。
- Install vue-router? (Y/n):是否安裝 Vue.js 的路由模組;
- Use ESLint to lint your code? (Y/n):否啟用 ESLint 檢測規則,看個人對自己程式碼的把握,我都是選的是。
- 最後的三個命令告訴你如何啟動:
- cd demo
- npm install
- npm run dev
這時,原本的空資料夾下將會產生你的專案資料夾,如下圖所示。
建立完成後在專案目錄下,執行npm install命令,如下圖所示。
然後開始慢慢的等待,大約幾分鐘之後完成安裝。
接下來可以選擇安裝路由(vue-router)和網路請求模組(vue-resource),但是,vue-resource 已經停止了更新,所以推薦大家使用 axios.js 進行互動,而 vue-router 會在新建專案的時候詢問你是否安裝,如果已經安裝了就不需要再安裝。
最終,執行npm run dev,啟動專案。如下圖所示。
瀏覽器將彈出一個 Vue.js 頁面,地址為localhost:8080。
如果在到這個步驟之前就出錯了,那麼請再確認下,保證所安裝的工具都是最新版本。
遇到類似這樣的提示:Cannot find xxxx,那就重新安裝使用cnpm install xxxx --save-dev,重新安裝xxxx。
最後附帶告訴大家兩個簡單的命令操作。
1.切換所在分割槽:分割槽+,如“e:”
2.返回上一級:cd ..
在 IDE 中開啟 Vue.js 專案
接下來就該準備開發IDE了,前端開發IDE有很多,我使用過的也有很多種,今天給大家推薦的是 WebStorm。
首先在網上下載安裝好 WebStorm,我使用的版本是2017.1.4。在 WebStorm 中開啟我們的專案資料夾。
下面我們一塊看看專案資料夾中的各個部分。
- build:最終釋出程式碼的存放位置。
- config:配置目錄,包括埠號等。我們初學可以使用預設的。
- node_modules:這是執行 npm install 後產生的,裡面包含了 Node.js 和 npm 依賴的檔案以及後續安裝的第三方元件或者第三方功能。
- src:我們要開發的目錄,用於存放頁面相關的檔案,基本上要做的事情都在這個目錄裡。其中還包含了以下幾個目錄及檔案:
- assets: 放置一些圖片,如:Logo等;
- components: 存放了一個元件檔案,可以不用;
- App.vue:是我們的主檔案,專案入口檔案,我們也可以直接將元件寫這裡,而不使用 components 目錄;
- main.js: 專案的核心檔案;
- router:其中包括的index.js,則是專案的路由;
- static:一般用於存放靜態資源,如圖片、字型等。
- .babelrc檔案:用來設定轉碼的規則和外掛的,一般情況不需要設定。
{ "presets": ["es2015", "stage-2"],//表示預設,表示babelrc轉換預先需要安裝的外掛 "plugins": ["transform-runtime"],//把ES6的方法做轉換 "comments": false //false表示轉換後代碼不生成註釋}
- .editorconfig檔案:用於規範程式碼縮排等的風格。
charset = utf-8 //編碼indent_style = space //縮排風格,基於空格做縮排indent_size = 2 //縮排大小是2格end_of_line = lf //換行符的風格insert_final_newline = true //當你建立一個檔案,會自動在檔案末尾插入新行trim_trailing_whitespace = true //自動移除行尾多餘空格
.gitignore檔案:如果你需要將專案放到 git 目錄裡,你又不想提交其中的某一部分檔案,那麼你就可以在.gitignore檔案中新增它們。
package.json檔案:用來管理所安裝的包,裡面包含專案的各類資訊,如第三方版本、專案名稱等。
{ "name": "demo", "version": "1.0.0", "description": "demoApp", "author": "", "private": true, "scripts": { /*表示可以執行一些命令,例如:npm run dev會執行node build/dev-server.js,npm run build會執行node build/build.js,因此可以通過scripts配置指令碼*/ "dev": "node build/dev-server.js", "build": "node build/build.js", "lint": "eslint --ext .js,.vue src" }, "dependencies": { /*專案的依賴*/ "vue": "^2.2.2", "vue-router": "^2.2.0" }, "devDependencies": { //編譯需要的依賴 ....................... }, "engines": { "node": ">= 4.0.0", "npm": ">= 3.0.0" }, "browserslist": [ "> 1%", "last 2 versions", "not ie <= 8" ]}
- package-lock.json 檔案:主要功能是確定當前安裝的包的依賴,以便後續重新安裝的時候生成相同的依賴,而忽略專案開發過程中有些依賴已經發生的更新。
- index.html 首頁入口檔案,你可以新增一些 meta 資訊或者統計程式碼等。
- README.md:是專案的說明文件,Markdown 格式。
當開始工作時你會發現,WebStorm 無法開啟 .vue 檔案。因為 .vue 是 Vue.js 的檔案格式,WebStorm 需要安裝額外的外掛並進行對應設定才能進行編輯。
該外掛的安裝步驟請見如下說明。
在 WebStorm 中選擇 setting->plugin,點選plugin,在內容部分的左側輸入框輸入 vue,會出現關於 Vue.js 的外掛,點選安裝即可。
接著按這個步驟操作:settings->editor->file and code templates,在右邊的列表中選擇 vuefile,如果第一步沒有安裝成功,這裡就不會出現。然後你可以選擇手動新增,點選綠色的加號,name 處輸入vue,Extension 處輸入 html,下面的區域就是程式碼模組了,我在這裡一般設定程式碼塊如下。
<template> <div> </div></template><script> export default { name: 'name', components: {}, data () { return { } }, methods: { }, mounted: { } }</script><style scoped></style>
其中,template 中書寫 HTML程式碼,方式與一般寫法一樣,可以把 template 看作 body 標籤。script 中寫的是JavaScript,name 為你當前頁面名字,components 中是你會引入的元件,data return 這個物件中就是你需要用的資料,它的作用域是當前整個頁面,只要在其中寫了就行,不需要額外定義。methods裡包含的是方法,在頁面中都可以呼叫。而 mounted 類似原生 JavaScript 的 onload 函式,在頁面載入的時候會執行,裡面可以寫單獨的方法,也可以呼叫其它方法。style 標籤中就是頁面的 CSS 部分。
儲存之後,在新建選項時,就會出現 Vue 了,新建之後預設程式碼就會如上。
寄語
剛入行的前端開發者,編寫程式碼使用簡單的 IDE,JavaScript檔案直接通過 script 引入,CSS 檔案 link 引入,這樣就寫完了一個專案。
架構、效能、優化等等這些都不會去考慮。隨著接觸的專案變多,變得越來越複雜,原本的技術在新的專案中顯得很不足,我們開始需要對專案進行管理優化發,就要開始使用各種工具。前面說到的工具,就是在工作中要不斷學習的。隨著前端的不斷髮展,自己接觸的東西也越來越多,要想自己的技術能站住腳,你需要掌握的技能也要不斷的增多。雖說多不如精,但對於前端而言,這些多樣化的技術都是你需要掌握的,千萬不要有“我現在可以用其他方法解決,我就不去學習”的心態,要多接觸新的技術,要適應整個前端的發展速度。
如今的前端開發工作,不再是簡單地會寫一些程式碼就可以了,社會需要技能廣泛的前端人才,你掌握的技能也得多樣化。
一個初級前端與一箇中級前端,他們之間必然存在差別就是對於各類前端技術的認知,如果你想提升自己,不妨根據本文的介紹進行額外的擴充。