在上一節完成Vue 3應用創建之後,我們來探索下應用的文件結構。
1. 整體結構
2. 根目錄文件
根目錄文件包括
l .gitignore:用於配置哪些文件不受git管理。
l babel.config.js:Babel中的配置文件。Babel一款JavaScript的編譯器。
l package.json、package-lock.json:npm包管理器的配置文件。npm install讀取package.json創建依賴項列表,並使用package-lock.json來通知要安裝這些依賴項的哪個版本。如果某個依賴項在package.json中,但是不在package-lock.json中,運行npm install會將這個依賴項的確定版本更新到package-lock.json中,不會更新其它依賴項的版本。
l README.md:項目的說明文件。一般會詳細說明項目作用、怎麼構建、怎麼求助等內容。
3. node_modules
安裝node後用來存放用包管理工具下載安裝的包的文件夾。
打開改目錄,可以看到項目所依賴的包非常的多。各個包的含義,這裏不再贅述。
4. public目錄
public目錄在下列情況下使用:
l 需要在構建輸出中指定一個文件的名字。
l 有上千個圖片,需要動態引用它們的路徑。
l 有些庫可能和 webpack 不兼容,這些庫放到這個目錄下,而後將其用一個獨立的 <script> 標籤引入。
5. src目錄
src目錄就是放項目源碼的目錄。
l assets目錄:用於放置靜態文件,比如一些圖片,JSON數據等
l components目錄:用於放置Vue公共組件。目前,該目錄下,僅有一個HelloWorld.vue組件。
l App.vue:頁面入口文件也是根組件(整個應用只有一個),可以引用其他Vue組件。
l 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>。這三部分可以簡單理解爲是一個網頁的三大核心部分HTML、JavaScript、CSS。
其中,<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屬性值在頁面實際渲染的效果如下圖所示。
參考引用
- 本系列歸檔至《跟老衛學Vue.js開發》:https://github.com/waylau/vuejs-enterprise-application-development
- 參考書籍《Vue.js 3企業級應用開發實戰》:https://item.jd.com/13624356.html