Vue项目目录结构及启动流程分析

3,653 阅读4分钟

常见Vue工程的目录结构

|--config/           #Vue基本配置文件,可以设置监听端口,打包输出等
|--node_modules/     # 依赖包
|--public
   |--favicon.ico    #标签图标
   |--index.html     #当前项目的唯一页面
|--src
   |--assets         #静态资源img,css,js
   |--api            #
   |--components     #小组件
   |--store 
      |--index.js    #根状态管理集
      |--modules     #模块化状态管理
      |--actions     #进行异步操作,提交mutation方法
      |--getters     #加工state中的成员变量并传至外界
      |--mutation-types.js #项目存放mutations方法常量的文件,按需加入
      |--mutations   #操作state数据的方法集合,比如对数据的增删改等等
      |--index.js
   |--views
      |--xxx.vue
   |--router
      |--index.js    #路由脚本文件,配置路由url与页面组建的映射关系
   |--App.vue        #根组件
   |--main.js        #入口文件
   |--package.json   #项目的配置信息,启动方式等
    

Vue的运行流程

index.html-->main.js-->App.vue-->router/index.js

index.html ---项目入口

index.html的内容比较简单,主要是提供一个div给vue挂载。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width, minimal-ui, viewport-fit=cover" />//适应手机屏幕

    <title>首页title</title>
  </head>
  <body>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

main.js---入口文件

main.js主要是引入vue、App、router模块,创建一个vue对象,并把App.vue模版的内容挂载到index.html的id为app的div标签下,并绑定一个路由配置。

import Vue from 'vue'    /*引入vue框架*/
import App from './App'     /*引入根组件*/
import router from './router'    /*引入路由设置*/
import store from './store'    /*引入根状态管理集文件*/
Vue.config.productionTip = false    /*关闭生产模式下给出的提示*/

//定义根组件,用render读取一个.vue文件,$mount渲染替换index.html中的占位
new Vue({
el:'#app',
router,
store,
render:h=>h(App),
}).$mount('#app');

App.vue ---根组件

我们在Vue中经常要建立后缀名为.vue的文件,.vue文件通常由<template></template>,<script></script><style></style>三部分组成。 其中template></template>通常建立我们要用的网页界面,<script></script>则是跟数据打交道,面向逻辑,而<style></style>主要是负责template></template>标签中的样式。 上面三者的结合,就构成了我们所见到的网页,一般我们在开发新页面的时需要创建一个新的.vue文件,在文件中完成三个环节的编写。

上面main.js将App.vue模版的内容放置在index.html的div标签内,由下图可见,App.vue中有一个待放置内容的<router-view/><router-view/>的内容将由router配置决定。

<template>
  <div id="app">
    <router-view/>
  </div>
</template>

<script>
export default {
  name: "app"
};
</script>
<style>
.add-container {
  margin-bottom: 20px;
}
</style>

在书写.vue文件中,需要注意以下几点:

  • template(模版)中只能包含一个父节点,即顶层的div只能有一个(例如上图,父节点为#app的div,没有其他兄弟节点)。<router-view></router-view>是子路由视图,后面的路由页面都显示在此处。

  • 对于script标签,vue通常用es6来写,然后用export default导出,内部可以包含数据data、生命周期(mounted等),方法(methods)等。

  • 样式是通过style标签<style></style>包裹,默认作用域是全局的,如需定义作用域在该组件下起作用,需在标签上加上scoped(<style scoped></style>)。

router.js---路由配置

在router文件夹下,有一个index.js文件,即为路由配置文件。由下图见,文件中配置了一个路由,在访问路径/的时候,会把Home模版的内容放置到上面的router-view中。

import Vue from 'vue';
import Router from 'vue-router';
import Home from 'views/home'
import About from 'views/about'
Vue.use(Router);
export default new Router({
    base:'/'
    routes:[
        {
            path:'/',
            name:'home',
            component:Home
        },
        {
            path:'/about'
            name:'about',
            component:About
        }
    ]
});

用户在浏览器中访问的路由是/,router插件就会加载home.vue文件,同理/about就是加载about.vue文件。用加载的home.vue文件或者about.vue文件去替换App.vue文件中的<router-view/>占位符。

###home.vue

<!--
1)一个.vue文件就是一个组件
2)组件都是由三部分组成:html结构、js逻辑、css样式
    html结构都是在template标签中,页面结构有且只有一个根标签(te mplate一级结构下)
    js逻辑都是在script标签中,必须设置导出,export default
    css样式都是在style标签中,必须设置scoped属性,是样式组件化。
-->

<template>
    <div class= "home">
        <h1>Home</h1>
    </div>
</template>

<script>
    //.vue文件类似于模块,可以直接相互导入,所以在组件内部要设置导出
    export defalt {
        
    }
</script>

<style scoped>
    .home {
        
    }
</style>