Vue小白課(二)——專案結構解析(Vue2.x)

豆包君發表於2019-01-15

@Vue專案結構解析

create by db on 2019-1-10 16:28:10
Recently revised in 2019-1-15 11:46:47

Hello 小夥伴們,如果覺得本文還不錯,麻煩點個贊或者給個 star,你們的贊和 star 是我前進的動力!GitHub 地址

 查閱網上諸多資料,並結合自己的學習經驗,寫下這篇Vue學習筆記,以記錄自己的學習心得。現分享給大家,以供參考。

 作為一隻前端菜鳥,這是我掘金分享的第五篇文章。如有不足,還請多多指教,謝謝大家。

前言

 在上一篇專案搭建文章中,我們已經下載安裝了node環境以及vue-cli,並且已經成功構建了一個vue-cli專案——見Vue小白課(一)——CLI搭建專案(Vue2.x)。那麼接下來,我們來梳理一下vue-cli專案的結構。

 參考文獻:

正文

Vue專案結構一覽

├── build --------------------------------- 專案構建(webpack)相關配置檔案,配置引數什麼的,一般不用動 
│   ├── build.js --------------------------webpack打包配置檔案
│   ├── check-versions.js ------------------------------ 檢查npm,nodejs版本
│   ├── dev-client.js ---------------------------------- 設定環境
│   ├── dev-server.js ---------------------------------- 建立express伺服器,配置中介軟體,啟動可熱過載的伺服器,用於開發專案
│   ├── utils.js --------------------------------------- 配置資源路徑,配置css載入器
│   ├── vue-loader.conf.js ----------------------------- 配置css載入器等
│   ├── webpack.base.conf.js --------------------------- webpack基本配置
│   ├── webpack.dev.conf.js ---------------------------- 用於開發的webpack設定
│   ├── webpack.prod.conf.js --------------------------- 用於打包的webpack設定
├── config ---------------------------------- 配置目錄,包括埠號等。我們初學可以使用預設的。
│   ├── dev.env.js -------------------------- 開發環境變數
│   ├── index.js ---------------------------- 專案配置檔案
│   ├── prod.env.js ------------------------- 生產環境變數
│   ├── test.env.js ------------------------- 測試環境變數
├── node_modules ---------------------------- npm 載入的專案依賴模組
├── src ------------------------------------- 我們要開發的目錄,基本上要做的事情都在這個目錄裡。
│   ├── assets ------------------------------ 靜態檔案,放置一些圖片,如logo等
│   ├── components -------------------------- 元件目錄,存放元件檔案,可以不用。
│   ├── main.js ----------------------------- 主js
│   ├── App.vue ----------------------------- 專案入口元件,我們也可以直接將元件寫這裡,而不使用 components 目錄。
│   ├── router ------------------------------ 路由
├── static ---------------------------- 靜態資源目錄,如圖片、字型等。
├── .babelrc--------------------------------- babel配置檔案
├── .editorconfig---------------------------- 編輯器配置
├── .gitignore------------------------------- 配置git可忽略的檔案
├── index.html ------------------------------ 	首頁入口檔案,你可以新增一些 meta 資訊或統計程式碼啥的。
├── package.json ---------------------------- node配置檔案,記載著一些命令和依賴還有簡要的專案描述資訊 
├── .README.md------------------------------- 專案的說明文件,markdown 格式。想怎麼寫怎麼寫,不會寫就參照github上star多的專案,看人家怎麼寫的
複製程式碼

 在webpack的配置檔案裡,設定了main.js是入口檔案,我們的專案預設訪問index.html,這個檔案裡面<div id="app"></div>和App.vue元件裡面的容器完美的重合了,也就是把元件掛載到了index頁面,然後我們只需要去建設其他元件就好了,在App元件中我們也可以引入,註冊,應用其他元件,可以通過路由將其他元件渲染在App元件,這樣我們就只需要去關注每個元件的功能完善。

 就是說vue的預設頁面是index.html,index中的<div id="app"></div>掛載了App.vue這個大元件,然後所有的其他子元件(hello.vue等)都歸屬在App.vue這個主元件下。

主要檔案詳解

src——[專案核心檔案]

 在vue-cli的專案中,其中src資料夾是必須要掌握的,因為基本上要做的事情都在這個目錄裡。

index.html——[主頁]

 index.html如其他html一樣,但一般只定義一個空的根節點,在main.js裡面定義的例項將掛載在根節點下,內容都通過vue元件來填充

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>vuedemo</title>
  </head>
  <body>
      <!-- 定義的vue例項將掛載在#app節點下 -->
    <div id="app"></div>
  </body>
</html>
複製程式碼

App.vue——[根元件]

 一個vue頁面通常由三部分組成:模板(template)、js(script)、樣式(style)

<!-- 模板 -->
<template>
  <div id="app">
    <img src="./assets/logo.png">
    <router-view></router-view>
  </div>
</template>

<!-- script -->
<script>
export default {
  name: 'app'
}
</script>

<!-- 樣式 -->
<style>
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>
複製程式碼

【template】

 其中模板只能包含一個父節點,也就是說頂層的div只能有一個(例如上面程式碼,父節點為#app的div,其沒有兄弟節點)

<router-view></router-view>是子路由檢視,後面的路由頁面都顯示在此處

 打一個比喻吧,<router-view>類似於一個插槽,跳轉某個路由時,該路由下的頁面就插在這個插槽中渲染顯示

【script】

 vue通常用es6來寫,用export default匯出,其下面可以包含資料data,生命週期(mounted等),方法(methods)等,具體語法請看vue.js文件。

【style】

 樣式通過style標籤包裹,預設是影響全域性的,如需定義作用域只在該元件下起作用,需在標籤上加scoped.

<style scoped></style>

 如要引入外部css檔案,首先需給專案安裝css-loader依賴包,開啟cmd,進入專案目錄,輸入npm install css-loader,回車。

 安裝完成後,就可以在style標籤下import所需的css檔案,例如:

<style>
    import './assets/css/public.css'
</style>

複製程式碼

main.js——[入口檔案]

 main.js主要是引入vue框架,根元件及路由設定,並且定義vue例項,下面的 components:{App}就是引入的根元件App.vue

 後期還可以引入外掛,當然首先得安裝外掛。

/*引入vue框架*/
import Vue from 'vue'
/*引入根元件*/
import App from './App'
/*引入路由設定*/
import router from './router'

/*關閉生產模式下給出的提示*/ 
Vue.config.productionTip = false

/*定義例項*/ 
new Vue({
  el: '#app',
  router,
  template: '<App/>',
  components: { App }
})
複製程式碼

router——[路由配置]

 vue-router是Vue.js官方的路由外掛,它和vue.js是深度整合的,適合用於構建單頁面應用。vue的單頁面應用是基於路由和元件的,路由用於設定訪問路徑,並將路徑和元件對映起來。

 router資料夾下,有一個index.js,即為路由配置檔案。

/*引入vue框架*/
import Vue from 'vue'
/*引入路由依賴*/
import Router from 'vue-router'
/*引入頁面元件,命名為Hello*/ 
import Hello from '@/components/Hello'

/*使用路由依賴*/ 
Vue.use(Router)

/*定義路由*/ 
export default new Router({
  routes: [
    {
      path: '/',
      name: 'Hello',
      component: Hello
    }
  ]
})
複製程式碼

 這裡定義了路徑為'/'的路由,該路由對應的頁面是Hello元件,所以當我們在瀏覽器url訪問http://localhost:8080/#/時就渲染的Hello元件

 類似的,我們可以設定多個路由,‘/index’,'/list'之類的,當然首先得引入該元件,再為該元件設定路由。

其他配置檔案

 主要包括webpack的配置,專案配置,專案依賴等等。

詳情可參考以下文章:

vue 模板檔案

這是我自己做的一個vue模板檔案,符合Eslint規則

<!--  -->
<template>
  <div/>
</template>

<script>
// 這裡可以匯入其他檔案(比如:元件,工具js,第三方外掛js,json檔案,圖片檔案等等)
// 例如:import 《元件名稱》 from '《元件路徑》'

export default {
  // import引入的元件需要注入到物件中才能使用
  components: {},
  data() {
    // 這裡存放資料
    return {

    }
  },
  // 監聽屬性 類似於data概念
  computed: {},
  // 監控data中的資料變化
  watch: {},
  // 生命週期 - 建立完成(可以訪問當前this例項)
  created() {

  },
  // 生命週期 - 掛載完成(可以訪問DOM元素)
  mounted() {

  },
  beforeCreate() {}, // 生命週期 - 建立之前
  beforeMount() {}, // 生命週期 - 掛載之前
  beforeUpdate() {}, // 生命週期 - 更新之前
  updated() {}, // 生命週期 - 更新之後
  beforeDestroy() {}, // 生命週期 - 銷燬之前
  destroyed() {}, // 生命週期 - 銷燬完成
  activated() {}, // 如果頁面有keep-alive快取功能,這個函式會觸發
  // 方法集合
  methods: {

  }
}

</script>
<style lang='less' scoped>
//@import url(); 引入公共css類

</style>
複製程式碼

總結

 vue-cli給建立vue專案提供了很大的便利。但是同時大量的第三方庫的使用,會讓打包後的js變的很大,所以還是要熟悉配置,熟悉第三方外掛的使用,才可以開發更高效的開發web應用。這裡把vue-cli的一些相關內容給自己做一個總結,便於以後查閱。也是希望對其他開發者有幫助。有不足之處請指正。

 路漫漫其修遠兮,與諸君共勉。

 祝大家2019更上一層樓!

後記:Hello 小夥伴們,如果覺得本文還不錯,記得點個贊或者給個 star,你們的贊和 star 是我編寫更多更豐富文章的動力!GitHub 地址

知識共享許可協議
db 的文件庫db 採用 知識共享 署名-非商業性使用-相同方式共享 4.0 國際 許可協議進行許可。
基於github.com/danygitgit上的作品創作。
本許可協議授權之外的使用許可權可以從 creativecommons.org/licenses/by… 處獲得。

相關文章