Vue 3系列之02——探索Vue 3應用

在上一節完成Vue 3應用創建之後,我們來探索下應用的文件結構。

 

1.   整體結構

2.   根目錄文件

根目錄文件包括

.gitignore:用於配置哪些文件不受git管理。

babel.config.jsBabel中的配置文件。Babel一款JavaScript的編譯器。

package.jsonpackage-lock.jsonnpm包管理器的配置文件。npm install讀取package.json創建依賴項列表,並使用package-lock.json來通知要安裝這些依賴項的哪個版本。如果某個依賴項在package.json中,但是不在package-lock.json中,運行npm install會將這個依賴項的確定版本更新到package-lock.json中,不會更新其它依賴項的版本。

README.md:項目的說明文件。一般會詳細說明項目作用、怎麼構建、怎麼求助等內容。

 

3.   node_modules

安裝node後用來存放用包管理工具下載安裝的包的文件夾。

打開改目錄,可以看到項目所依賴的包非常的多。各個包的含義,這裏不再贅述。

 

4.   public目錄

 

 

public目錄在下列情況下使用:

 

需要在構建輸出中指定一個文件的名字。

有上千個圖片,需要動態引用它們的路徑。

有些庫可能和 webpack 不兼容,這些庫放到這個目錄下,而後將其用一個獨立的 <script> 標籤引入。

 

5.   src目錄

src目錄就是放項目源碼的目錄。

 

 

 

assets目錄:用於放置靜態文件,比如一些圖片,JSON數據等

components目錄:用於放置Vue公共組件。目前,該目錄下,僅有一個HelloWorld.vue組件。

App.vue:頁面入口文件也是根組件(整個應用只有一個),可以引用其他Vue組件。

main.js:程序入口文件,主要作用是初始化Vue實例並使用需要的插件。

 

5.1.     main.js

想看下main.js的源碼:

 

import { createApp } from 'vue'

import App from './App.vue'

 

createApp(App).mount('#app')

 

上述代碼比較簡答,就是初始化了Vue的應用實例。應用實例來自App.vue組件。

 

5.2.     App.vue

 

App.vue是根組件,整個應用只有一個。源碼如下:

 

<template>

  <img alt="Vue logo" src="./assets/logo.png">

  <HelloWorld msg="Welcome to Your Vue.js App"/>

</template>

 

<script>

import HelloWorld from './components/HelloWorld.vue'

 

export default {

  name: 'App',

  components: {

    HelloWorld

  }

}

</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><script><style>。這三部分可以簡單理解爲是一個網頁的三大核心部分HTMLJavaScriptCSS

其中,<template>又引用了一個子組件HelloWorld。該HelloWorld組件是通過<script>從“'./components/HelloWorld.vue”文件引入的。

 

5.3.     HelloWorld.vue

 

HelloWorld.vue子組件是整個應用的核心了。源碼如下:

 

<template>

  <div>

    <h1>{{ msg }}</h1>

    <p>

      For a guide and recipes on how to configure / customize this project,<br>

      check out the

      <a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.

    </p>

    <h3>Installed CLI Plugins</h3>

    <ul>

      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>

      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint" target="_blank" rel="noopener">eslint</a></li>

    </ul>

    <h3>Essential Links</h3>

    <ul>

      <li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>

      <li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>

      <li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>

      <li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>

      <li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>

    </ul>

    <h3>Ecosystem</h3>

    <ul>

      <li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>

      <li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>

      <li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>

      <li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>

      <li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>

    </ul>

  </div>

</template>

 

<script>

export default {

  name: 'HelloWorld',

  props: {

    msg: String

  }

}

</script>

 

<!-- Add "scoped" attribute to limit CSS to this component only -->

<style scoped>

h3 {

  margin: 40px 0 0;

}

ul {

  list-style-type: none;

  padding: 0;

}

li {

  display: inline-block;

  margin: 0 10px;

}

a {

  color: #42b983;

}

</style>

 

 

HelloWorld.vue子組件的結構與App.vue組件是一樣的,也是包含了三部分。

 

<script>導出了一個叫做“msg”的String類型的屬性變量。而後該變量在<template><h1>{{ msg }}</h1>做了綁定,這樣,在界面渲染完成時,頁面的{{ msg }}位置的內容,將會被該屬性變量的值所替換。

 

那麼“msg”屬性變量的值到底是什麼呢?我們回到App.vue組件的源碼:

 

 

<template>

  <img alt="Vue logo" src="./assets/logo.png">

  <HelloWorld msg="Welcome to Your Vue.js App"/>

</template>

 

可以看到HelloWorld組件的msg屬性值是“Welcome to Your Vue.js App”。這意味着,子組件HelloWorld.vue可以接收由父組件App.vue組件的傳值。

 

msg屬性值在頁面實際渲染的效果如下圖所示。

 

 

參考引用

  1. 本系列歸檔至《跟老衛學Vue.js開發》https://github.com/waylau/vuejs-enterprise-application-development
  2. 參考書籍《Vue.js 3企業級應用開發實戰》:https://item.jd.com/13624356.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章