Vue 2.5 從零開始學習 - 探索、理解工程化 Vue 項目的 文件結構與內容

探索、理解工程化 Vue 項目的 文件結構與內容:

說起來,像這樣細致而規范地進行一次項目文件結構的探索,然后得到一些對項目架構的理解,還就是從我開始學前端開發開始的。

當我第一次用 Vue CLI 建立起一個項目的時候,面對著這么多我看不懂、甚至連后綴名都不認識的文件,我是一臉懵逼的,所以初學 Vue 的時候確實舉步維艱 ...

所以,要想用好 Vue ,首先得知道為什么、和要怎樣以大致就像初始化后這樣的一個結構去規范開發。

注意!

同樣的,由于我本人對整套筆記的初步設計... 在這里不會展開對 webpack 和 babel 配置文件的相關介紹... 留到后面再統一系統地總結。

我們的頁面在哪里?

當我一步一步按照 Vue.js 的官方教程 第一次 npm run serve ,并在 localhost 8080 看到頁面之后 ...

  • 我點開了 Chrome 的 F12 調試臺,看到在 div#app 中有細分下去的 DOM 樹,
  • 可是我在文件夾里找到的 index.html 的 div#app 標簽里 什么也沒有 ...
  • 并且按照我們之前的學習,至少要有一個地方使用 new Vue( { ... } ) 掛載上一個 Vue 實例,我很疑惑,并不理解它是從哪個地方的 script 腳本里掛載的...
  • 那時我也還不理解 “打包” 、“開發模式運行” 等概念 ...

不過,既然我翻開了文件夾,就一定能在 src 即 source 資源文件夾內看到幾個 .vue 文件...

打開之后時這個樣子的三塊結構:

<template>
    <div id="app">
    <div id="nav">
      <router-link to="/">Home</router-link> |
      <router-link to="/about">About</router-link>
    </div>
    <router-view/>
  </div>
</template>

<script>
    ....
</script>

<style>
    ....
</style>

我覺得這和 HTML 很像 ... 因為都有 script 和 style 來定義頁面的樣式和一些腳本。但看到 template 的時候,我只想到了之前第一次課初探時用過的 Vue 實例中的 template ,我類比著思考,覺得這里一定就是掛載的那個 Vue 實例的頁面DOM結構了...

哈,新發現!至少找到了一些 div#app 里的東西啦!

可是那個 router-link 是什么?它可不是什么 html 的原生標簽吧!屬性中的 to 和 " / " 斜杠符號 無不透露著它代表著某種 **路由指向 **... 可能是類似 a 標簽的 href 鏈接吧 ?

如果說 router-link 是鏈接,那么 router-view 又是什么呢? 路由視圖?聽上去怪怪的 ...

對這個 router 感覺還是一知半解 ... 那不如去看看 上一級文件夾里 也有個叫 router.js 的文件吧

// router.js
import Vue from 'vue';
import Router from 'vue-router';
import Home from './views/Home.vue';

Vue.use(Router);

export default new Router({
  mode: 'history',
  base: process.env.BASE_URL,
  routes: [
    {
      path: '/',
      name: 'home',
      component: Home,
    },
    {
      path: '/about',
      name: 'about',
      // route level code-splitting
      // this generates a separate chunk (about.[hash].js) for this route
      // which is lazy-loaded when the route is visited.
      component: () => import(/* webpackChunkName: "about" */ './views/About.vue'),
    },
  ],
});

雖然這篇代碼里,我有好多東西都不懂,但是我這個人就是這樣,哪怕看不懂的東西,我也會先撿著我看得懂的讀,慢慢地思考、理解其他的陌生事物可能是什么 ...

  • 那個 mode 顯示是 history 模式,一定就是我們創建時選擇的 用 歷史模式 創建 Vue router 了。

  • 接下來的 routes 是一個 Object 對象數組,既然這個單詞 是復數形式,那么這里一定裝的就是各個路由鏈接的屬性信息了。

  • path、name 指定了 某個路由鏈接對象的 路由 和 名稱,這個 path 就是之后再瀏覽器中 " /#/ " 之后會訪問的 url 路徑地址。( 如果你不采用 history 模式的話,就是傳統的 /xxx 路由模式,就沒有 # 號了。)

  • 而這個 component 就很眼熟啦!我們不是才學過 TODO List 的組件化開發嗎!

    我感覺一下子明白了,原來 .vue 文件 就是更完整、更復雜一些的 Vue.component( { template: ... } ) ,

  • 所以其實 每一個 .vue 文件都將是我們開發過程中的一個組件:

    比如你需要做一個移動電商網站的底部導航欄,四個小按鈕分別是“ 首頁、 發現好物、 購物車、 我的信息 ”,

    它們本質上都差不多嘛!

    那么不如將單個按鈕封裝成一個 “ 底部導航欄單按鈕組件 ”, 然后又新建一個 .vue 把這四個按鈕放一起,再次封裝成這樣一整個 “ 底部導航欄 ”,就可以很隨意很方便地在任何地方引入了!

  • 當然 .vue 文件的組件內也可以引用組件呀!

    比如我們的初始化項目中展示了兩個路由點: Home 和 About 頁面,而 Hello 組件實質上包含了一個 HelloWorld.vue 文件,在 components 文件夾中 ...

    在代碼中是這樣引入的:

    <script>
    // @ is an alias to /src
    import HelloWorld from '@/components/HelloWorld.vue';
    
    export default {
      name: 'home',
      components: {
        HelloWorld,  // 將引入的組件注冊進來...
      },
    };
    </script>
    
    • 我們可以看到,官方 Vue CLI 腳手架生成項目后的注釋非常細致,它告訴了我們,@ 字符在路徑中表達的就是我們的 src 文件夾目錄,畢竟 src 文件夾是我們項目的總資源庫,所有東西基本都在這里,所以這在之后我們會經常用到這個簡寫。

    • 當然光 import 也是不夠的,就像我們在學習 Vue 單 html 頁面實例掛載時一樣,同樣也需要將組建注冊到這個 .vue 的組件中!

      你看這里也 export default 了一個對象,其實這也可以看做是一個 Vue 對象,因為最后你就是把這個 .vue 文件所代表的組件給導出了嘛 ...

多提一句 組件的引入與導出

其實當我看到 import 的時候還好,明白就是從某某文件中引入某個東西 ...

但是那個 export default 導出就讓我有點看著面生了 ...

隨著時代的發展 和 ECMAScript 的逐漸完善,ES6 開始可以讓我們自由地將你這一個 js 文件中的 對象 導出,并可以由其他 js 文件 導入進行使用 ... 聽上去和 python 的 from xxx import xxx 很類似 ,也就不難理解了...

組件化開發、工程化開發也必定是前端開發未來的大趨勢

既然我們還在說 router 路由,那么其實關于底部導航欄,還有更好的辦法,那就是一并使用路由來管理 ... 因為底部 Tab bar 主要的功能 是切換頁面呀!

說完了組件的配置 js 文件,那么進入 main.js

當我們運行 npm install --save 來安裝某個工具包的時候,我們只是將它寫進了 package.json ,并把它下載到了當前項目文件夾的 node-modules 里面。

而 main.js 是整個項目的總舵手,它會以 js 的方式裝載各個引入的組件,這才是在項目中實際地把工具包引入進來哦!

// main.js 
import Vue from 'vue';
import App from './App.vue';
import router from './router';
import store from './store';

Vue.config.productionTip = false;

new Vue({
  router,
  store,
  render: h => h(App),
}).$mount('#app');

我們終于找到啦!原來項目就是在這里 掛載的全局 Vue 實例 !

這樣我們和之前的 單頁面單HTML文件 掛在 Vue 實例的方式一對比,就能很清晰明了地明白 :

  • 在 Router 工具包的幫助下,項目以各個 路由點 來作為 組件的開發基礎目標;
  • 以組件化化的方式,構建 .vue 文件來拼裝整個項目;
  • 通過 main.js 來定義、總領整個項目的 Vue 架構 ...
  • 通過 ESLint 來規范項目的代碼內容、通過 Webpack 、Babel 等工具來打包發布項目 ...

這不禁令我感嘆,原來前端開發也大有學問、大有可為。

事實證明,在干任何事情之前,首先你得要有一個總體的把握和認識,一個清晰的思路。

“ 努力是好的,但也要努力對方向,不要讓自己白費力氣!” —— 看《青春有你》時聽徐明浩說到的一句很有意義的話。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,818評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,185評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,656評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,647評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,446評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,951評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,041評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,189評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,718評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,800評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,419評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,420評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,755評論 2 371

推薦閱讀更多精彩內容

  • 有時候 好看的照片來自這里[呲牙] 多年以前還常會請人幫忙,當然也都是相互的[玫瑰],后來 后來就腦洞大開了[偷笑...
    一道風景線lilian閱讀 197評論 2 2
  • 我都忘了 有很久很久都沒有好好欣賞這個世界 這個世界 它可以讓我吃到最美味的甜品 它可以讓我聆聽最動聽的歌曲 它可...
    胖白狗閱讀 187評論 2 0
  • 感恩周末,今天有時間陪陪孩子,帶他去公園,陪他玩玩具。感恩玩具給孩子帶來的快樂,感恩時光,孩子一天天長大了,珍惜陪...
    那朵花蕾閱讀 105評論 0 0
  • 一寒假沒碰簡書,上次寫是上學期放假的那天,因為一直感覺自己文筆干巴巴的,實在登不了大臺面。但是一個假期真...
    dogjiamin閱讀 416評論 2 1