Vue及项目结构介绍

今天滴学习目标!!!

  • 项目结构介绍
    • [1.Vue 项目文件结构](#1.Vue 项目文件结构)
    • [2. 文件结构详解](#2. 文件结构详解)
      • [2.1 index.html](#2.1 index.html)
      • [2.2 src/main.js](#2.2 src/main.js)
      • [2.3 src/App.vue](#2.3 src/App.vue)
      • [2.4 src/components/](#2.4 src/components/)
      • [2.5 src/assets/](#2.5 src/assets/)
      • [2.6 package.json](#2.6 package.json)
    • [3. 项目启动](#3. 项目启动)

首先我们先学习Vue项目结构,我们创建Vue项目时,它会生成一个标准的项目结构。以下是项目结构介绍。后面我们就开始该怎么用Vue的指令。

项目结构介绍

1.Vue 项目文件结构

java 复制代码
Vue
│
├── node_modules/          # 依赖包
│
├── public/                # 静态资源
│   └── favicon.ico        # 图片资源(网站图标)
│
├── src/                   # 源代码
│   ├── assets/            # 资源模板 (静态资源目录 如:图片、样式等)
│   ├── components/        # 通用组件 (存放 Vue 组件)
│   ├── App.vue            # 根组件 (所有页面的入口)
│   ├── main.js            # 入口JS文件 (项目的主入口文件)
│
├── index.html             # 入口HTML文件
├── package.json           # 项目的依赖和配置
├── package-lock.json      # 记录了项目中所有依赖的精确版本信息
├── vue.config.js          # Vue 配置文件

大家喜欢哪个嘞?

2. 文件结构详解

2.1 index.html

在Vue项目中,index.html是项目的入口文件,用于初始化Vue应用程序并定义其HTML结构。以下是index.html在Vue项目中的典型代码示例:

html 复制代码
<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <meta name="viewport" content="width=device-width, initial-scale=1.0">  
    <title>Vue App</title>  
    <!-- 引入Vue框架(这里以CDN方式引入为例) -->  
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>  
    <!-- 引入Vue Router(如果使用了路由) -->  
    <!-- <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script> -->  
    <!-- 引入其他必要的库或样式 -->  
    <!-- <link rel="stylesheet" type="text/css" href="path/to/your/stylesheet.css"> -->  
    <!-- <script src="path/to/your/library.js"></script> -->  
</head>  
<body>  
    <!-- Vue实例挂载的容器 -->  
    <div id="app"></div>  
  
    <!-- 引入构建后的JavaScript文件(通常由Webpack等构建工具生成) -->  
    <!-- 注意:在实际项目中,这个路径可能会根据构建配置有所不同 -->  
    <script src="/dist/build.js"></script>  
  
    <!-- 引入自定义脚本(可选) -->  
    <!-- <script src="./path/to/custom-script.js"></script> -->  
</body>  
</html>

关键点说明:

  1. DOCTYPE和HTML标签:
    • <!DOCTYPE html> 声明文档类型,确保浏览器以标准模式渲染页面。
    • <html lang="en"> 定义HTML文档的根元素,并设置语言属性为英语(可以根据需要更改为其他语言)。
  2. 头部(head)部分:
    • <meta charset="UTF-8"> 设置文档的字符编码为UTF-8。
    • <meta name="viewport" content="width=device-width, initial-scale=1.0"> 设置视口,确保页面在移动设备上正确显示。
    • <title> 设置页面的标题,这将在浏览器的标签页上显示。
    • 引入Vue框架和其他必要的库(如Vue Router),这里以CDN方式引入Vue为例。
  3. 主体(body)部分:
    • <div id="app"></div> 是Vue实例挂载的容器,Vue应用将在这个容器内进行渲染。
    • 引入构建后的JavaScript文件(如/dist/build.js),这个文件通常由Webpack等构建工具生成,包含了Vue应用的编译结果。
  4. 自定义脚本(可选):
    如果需要在index.html中引入自定义脚本,可以在</body>标签之前添加<script src="./path/to/custom-script.js"></script>

注意:在实际的Vue项目中,index.html的内容可能会根据项目的构建配置和使用的工具链有所不同。例如,如果你使用了Vue CLI来创建项目,那么index.html文件通常会位于public目录下,并且构建工具会自动处理JavaScript和CSS文件的引用。此外,在开发过程中,你可能会使用热重载(hot-reload)功能来实时查看更改效果,而在生产环境中,构建工具会生成优化后的代码以提高性能。

2.2 src/main.js

在Vue项目中,src/main.js 是项目的入口JavaScript文件,它负责初始化Vue实例、配置Vue Router(如果使用)、引入Vuex(如果使用状态管理)、注册全局组件、安装Vue插件以及挂载Vue应用到DOM元素上。以下是 src/main.js 在Vue项目中的典型代码示例:

javascript 复制代码
// 引入Vue框架  
import Vue from 'vue';  
  
// 引入App组件(根组件)  
import App from './App.vue';  
  
// 引入Vue Router(如果使用了路由)  
import router from './router';  
  
// 引入Vuex(如果使用了状态管理)  
// import store from './store';  
  
// 引入全局样式或插件(可选)  
// import './assets/styles.css';  
// import SomePlugin from 'some-plugin';  
  
// 如果使用了Vuex,则在创建Vue实例时传入store  
// Vue.config.productionTip = false; // 阻止vue在启动时生成生产提示  
  
new Vue({  
  // 渲染挂载点  
  el: '#app',  
    
  // 挂载的组件实例  
  render: h => h(App),  
    
  // 如果使用了Vue Router,则传入router配置  
  router,  
    
  // 如果使用了Vuex,则传入store实例  
  // store,  
    
  // 其他Vue实例的配置选项(如全局混入、全局指令等)  
  // ...  
}).$mount('#app'); // 这一步在render函数中已经隐式完成了,通常不需要显式调用$mount  
  
// 注意:在Vue 2.x中,通常不需要显式调用$mount('#app'),因为render函数已经指定了挂载点。  
// 但在某些情况下(如需要在JavaScript中动态创建Vue实例时),可能需要显式调用$mount。  
// 在上面的示例中,由于render函数已经指定了挂载到#app,所以$mount('#app')是多余的。  
  
// 如果使用了插件,如Vuex或第三方UI库,则需要在Vue实例创建之前或之后调用它们的安装方法。  
// 例如:Vue.use(SomePlugin);

关键点说明:

  1. 引入Vue框架:使用 import Vue from 'vue'; 引入Vue框架。
  2. 引入App组件:使用 import App from './App.vue'; 引入根组件 App.vue。
  3. 引入Vue Router:如果项目使用了Vue Router进行路由管理,则使用 import router from './router'; 引入路由配置。
  4. 引入Vuex:如果项目使用了Vuex进行状态管理,则使用 import store from './store'; 引入状态管理配置,并在创建Vue实例时传入 store。
  5. 创建Vue实例:使用 new Vue({...}) 创建一个新的Vue实例,并传入必要的配置选项,如 el(挂载点,但通常与 render 函数一起使用而不需要显式指定)、render(渲染函数,用于指定挂载的组件)、router(路由配置)、store(状态管理配置)等。
  6. 挂载Vue应用:在Vue 2.x中,由于 render 函数已经指定了挂载点,所以通常不需要显式调用 .$mount('#app')。但在某些特殊情况下,可能需要显式调用 $mount 方法来挂载Vue实例。
  7. 全局配置:可以在创建Vue实例之前或之后进行全局配置,如引入全局样式、插件、混入、指令等。

注意:上述代码示例是基于Vue 2.x版本的。在Vue 3.x中,由于引入了Composition API和全局API的变更,main.js 的内容可能会有所不同。例如,Vue 3.x 中不再推荐使用 Vue.use() 来安装插件(尽管它仍然有效),而是推荐使用 app.use() 方法来安装插件到特定的Vue应用实例上。

2.3 src/App.vue

在Vue项目中,src/App.vue 是项目的根组件文件,它通常包含了整个Vue应用的顶级模板、脚本和样式。App.vue 组件是Vue实例挂载的组件,所有其他组件都会作为其子组件或后代组件被引入和使用。

以下是 src/App.vue 在Vue项目中的典型代码示例:

vue 复制代码
<template>  
  <div id="app">  
    <!-- 应用的顶级模板内容 -->  
    <router-view/> <!-- 如果使用了Vue Router,则这个组件用于显示当前路由对应的组件 -->  
    <!-- 或者你可以在这里直接放置其他组件 -->  
    <!-- <MyComponent /> -->  
  </div>  
</template>  
  
<script>  
// 引入需要的组件(可选)  
// import MyComponent from './components/MyComponent.vue';  
  
export default {  
  name: 'App', // 组件名称,用于调试  
  // 组件的props(如果有的话)  
  // props: { ... },  
  // 组件的数据  
  data() {  
    return {  
      // ...  
    };  
  },  
  // 组件的计算属性  
  computed: {  
    // ...  
  },  
  // 组件的方法  
  methods: {  
    // ...  
  },  
  // 组件的生命周期钩子  
  created() {  
    // ...  
  },  
  mounted() {  
    // ...  
  },  
  // ... 其他生命周期钩子  
  // 组件的样式(可选,通常使用单文件组件的<style>标签)  
  // styles: { ... }, // 注意:这不是Vue的标准属性,仅用于说明  
  // 如果使用了Vue Router,则不需要在这里处理路由逻辑,<router-view>会自动处理  
};  
</script>  
  
<style>  
/* 组件的CSS样式 */  
#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>

关键点说明:

  1. 模板(template):定义了组件的HTML结构。在这个例子中,<div id="app"> 是根元素,<router-view/> 是Vue Router用于显示当前路由对应组件的插槽。如果你没有使用Vue Router,你可以在这里直接放置其他组件的标签,如 <MyComponent />
  2. 脚本(script):包含了组件的JavaScript逻辑。在这个例子中,我们导出了一个包含组件选项的对象。这个对象可以包含组件的名称、数据、计算属性、方法、生命周期钩子等。
  3. 样式(style):定义了组件的CSS样式。在这个例子中,我们为 #app 元素添加了一些基本的样式。注意,在单文件组件中,样式是局部作用于当前组件的,除非你使用了全局样式或特殊的CSS预处理器指令。

在实际的Vue项目中,App.vue 的内容会根据项目的需求和结构有所不同。例如,你可能会在 <template> 中添加更多的HTML结构,在 <script> 中引入和使用Vuex store、Vue Router的钩子、第三方库等,或者在 <style> 中使用CSS预处理器(如Sass、Less)来编写更复杂的样式。

2.4 src/components/

在Vue项目中,src/components/ 是一个目录,用于存放Vue组件的源代码文件。这些组件是Vue应用构建块,可以包含模板(HTML)、脚本(JavaScript)和样式(CSS),并且它们可以被其他组件复用。

每个组件通常是一个 .vue 文件,这是一个单文件组件(Single File Component,简称SFC),它允许你将模板、脚本和样式封装在一个文件中。

以下是一个典型的Vue组件文件结构,假设它位于 src/components/MyComponent.vue:

vue 复制代码
<template>  
  <div class="my-component">  
    <!-- 组件的HTML结构 -->  
    <h1>{{ title }}</h1>  
    <button @click="handleClick">Click Me</button>  
  </div>  
</template>  
  
<script>  
export default {  
  name: 'MyComponent', // 组件名称  
  props: {  
    // 接收来自父组件的数据  
    initialTitle: {  
      type: String,  
      default: 'Hello, World!'  
    }  
  },  
  data() {  
    return {  
      // 组件的局部状态  
      title: this.initialTitle  
    };  
  },  
  methods: {  
    // 组件的方法  
    handleClick() {  
      this.title = 'Button Clicked!';  
    }  
  }  
  // 还可以包含计算属性、生命周期钩子、监听器等  
};  
</script>  
  
<style scoped>  
/* 组件的局部样式 */  
.my-component {  
  text-align: center;  
  margin-top: 20px;  
}  
  
button {  
  padding: 10px 20px;  
  font-size: 16px;  
}  
</style>

关键点说明:

  1. 模板(template):定义了组件的HTML结构。在这个例子中,有一个标题和一个按钮。
  2. 脚本(script):包含了组件的JavaScript逻辑。在这个例子中,我们导出了一个包含组件选项的对象,如组件名称、接收的props、局部状态(data)、方法(methods)等。
  3. 样式(style):定义了组件的CSS样式。在这个例子中,我们使用了 scoped 属性,这意味着这些样式只会应用于当前组件的元素,而不会影响到其他组件。

在 src/components/ 目录下,你可以创建多个 .vue 文件来定义不同的组件。然后,你可以在 App.vue 或其他组件中通过 这样的标签来引入和使用这些组件。

记住,组件化是Vue框架的一个核心概念,它允许你将UI拆分成可复用的、独立的部分,从而使你的应用更加模块化和可维护。

2.5 src/assets/

在Vue项目中,src/assets/ 是一个目录,专门用于存放静态资源文件。这些资源文件包括但不限于图片、字体文件、样式表(CSS)、以及其他可能在项目中用到的媒体文件或静态数据文件。

由于 src/assets/ 目录下的文件主要是静态资源,因此通常不需要编写代码(如 .vue 文件中的模板、脚本和样式)。相反,这些资源文件会被直接引用或导入到Vue组件或其他JavaScript文件中。

以下是一些在 src/assets/ 目录中可能存在的文件类型及其引用方式的示例:

  1. 图片文件:
    • 文件类型:.png、.jpg、.svg 等。
    • 引用方式:在Vue组件的模板中,可以使用相对路径来引用这些图片。例如,如果有一张图片位于 src/assets/images/logo.png,则可以在模板中这样引用它:<img src="@/assets/images/logo.png" alt="Logo">。注意,@ 符号通常在Vue项目中配置为 src 目录的别名。
  2. 字体文件:
    • 文件类型:.woff、.woff2、.ttf、.eot 等。
    • 引用方式:这些字体文件通常会在CSS文件中被引用,用于定义自定义字体。例如,在Vue组件的 <style> 标签内或单独的CSS文件中,可以这样引用字体文件:@font-face { font-family: 'MyFont'; src: url('@/assets/fonts/myfont.woff2') format('woff2'); }。
  3. 样式表(CSS):
    • 文件类型:.css。
    • 引用方式:在Vue组件的 <style> 标签内,可以通过 @import 语句来引入外部的CSS文件。例如:@import '@/assets/css/styles.css';。然而,更常见的是将样式直接写在组件的 <style> 标签内,或者使用CSS预处理器(如Sass、Less)来编写样式。
  4. 其他静态数据文件:
    • 文件类型:.json、.txt、.csv 等。
    • 引用方式:这些文件可以通过JavaScript的 import 语句或 fetch API 来加载。例如,如果有一个JSON文件位于 src/assets/data/config.json,则可以使用 import config from '@/assets/data/config.json' 来导入它(注意,这种方式要求Webpack等构建工具支持JSON文件的导入)。

注意:由于 src/assets/ 目录下的文件是静态资源,它们通常不会被Webpack等构建工具进行代码分割或懒加载。因此,如果项目中包含大量的静态资源文件,可能会对应用的加载性能产生影响。为了优化性能,可以考虑使用CDN来托管静态资源、对图片进行压缩和优化、以及使用代码分割和懒加载等技术来减少初始加载时间。

2.6 package.json

在Vue项目中,package.json 是一个非常重要的文件,它位于项目的根目录,并包含了项目的元数据以及项目所依赖的npm包(Node Package Manager)。这个文件是Node.js项目(包括Vue项目)的标准配置文件,用于定义项目的名称、版本、描述、作者、脚本、依赖、开发依赖等信息。

以下是一个Vue项目典型的 package.json 文件的内容示例:

json 复制代码
{  
  "name": "my-vue-project",  
  "version": "1.0.0",  
  "description": "A Vue.js project",  
  "author": "Your Name <your.email@example.com>",  
  "private": true,  
  "scripts": {  
    "serve": "vue-cli-service serve",  
    "build": "vue-cli-service build",  
    "lint": "vue-cli-service lint"  
  },  
  "dependencies": {  
    "vue": "^2.6.11",  
    "vue-router": "^3.2.0",  
    "axios": "^0.21.1",  
    // 其他生产环境依赖的包  
  },  
  "devDependencies": {  
    "@vue/cli-plugin-babel": "~4.5.0",  
    "@vue/cli-plugin-eslint": "~4.5.0",  
    "@vue/cli-service": "~4.5.0",  
    "babel-eslint": "^10.1.0",  
    "eslint": "^6.7.2",  
    "eslint-plugin-vue": "^6.2.2",  
    // 其他开发环境依赖的包  
  },  
  "eslintConfig": {  
    "root": true,  
    "env": {  
      "node": true  
    },  
    "extends": [  
      "plugin:vue/essential",  
      "eslint:recommended"  
    ],  
    "parserOptions": {  
      "parser": "babel-eslint"  
    },  
    "rules": {  
      // ESLint规则配置  
    }  
  },  
  "browserslist": [  
    "> 1%",  
    "last 2 versions",  
    "not dead"  
  ]  
}

关键点说明:

  1. name:项目的名称。
  2. version:项目的版本号。
  3. description:项目的描述。
  4. author:项目的作者信息。
  5. private:如果设置为 true,表示这是一个私有包,不会被发布到npm上。
  6. scripts:定义了项目可以运行的脚本命令。在Vue项目中,通常包括 serve(启动开发服务器)、build(构建生产环境的包)和 lint(运行ESLint代码检查)等命令。
  7. dependencies:列出了项目在生产环境中需要安装的npm包及其版本号。
  8. devDependencies:列出了项目在开发环境中需要安装的npm包及其版本号。这些包通常用于开发过程中的构建、测试和调试。
  9. eslintConfig:ESLint的配置信息,用于定义代码检查规则。
  10. browserslist:指定了项目支持的浏览器范围,这有助于Babel和Autoprefixer等工具根据目标浏览器自动调整代码。

在Vue项目中,package.json 文件通常是通过Vue CLI(Vue脚手架)在创建项目时自动生成的。你可以通过运行 npm install 命令来安装所有依赖的包,运行 npm run serve 命令来启动开发服务器,以及运行 npm run build 命令来构建生产环境的包。

3. 项目启动

在Vue项目中,从项目启动到网页访问的过程涉及多个步骤和组件的交互。下面是一个简化的顺序描述,以及在这个过程中可能涉及的代码和概念。

  1. 项目启动

    当你运行 npm run serve(或 yarn serve,取决于你使用的包管理器)时,Vue CLI 会执行以下操作:

    • 读取package.json: 找到与 serve 脚本关联的命令,通常是 vue-cli-service serve。
    • 启动开发服务器: Vue CLI 使用 webpack-dev-server 或类似的工具来启动一个本地开发服务器。
    • 编译和监听文件变化: webpack 开始编译你的项目,包括所有的 .vue 文件、JavaScript、CSS 等,并将它们打包成一个或多个bundle。同时,webpack 会监听文件系统的变化,以便在文件被修改时重新编译。
  2. 构建Vue实例和挂载根组件

    在编译后的代码中,会有一个入口文件(通常是 main.js 或 main.ts),它负责创建Vue实例并挂载根组件。

    javascript 复制代码
    // main.js 或 main.ts  
    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实例:通过 new Vue({...}) 创建一个新的Vue实例。
    • 配置路由和状态管理:将路由(router)和状态管理(store,如果使用Vuex的话)作为选项传递给Vue实例。
    • 渲染根组件:使用 render 函数渲染 App.vue 组件,这是你的应用的根组件。
    • 挂载到DOM:通过 $mount('#app') 将Vue实例挂载到页面上ID为 app 的元素上。
  3. 路由和组件加载

    一旦Vue实例被挂载,Vue Router 就会接管路由的管理。当用户访问不同的URL时,Vue Router 会根据路由配置加载相应的组件。

    javascript 复制代码
    // router/index.js  
    import Vue from 'vue';  
    import Router from 'vue-router';  
    import Home from '@/components/Home.vue';  
    import About from '@/components/About.vue';  
    
    Vue.use(Router);  
    
    export default new Router({  
      routes: [  
       {  
          path: '/',  
         name: 'Home',  
          component: Home  
        },  
        {  
          path: '/about',  
          name: 'About',  
          component: About  
       }  
     ]  
    });
    • 定义路由:在路由配置文件中(如 router/index.js),你定义了路由规则,将URL路径映射到对应的组件。
    • 导航和组件渲染:当用户访问某个URL时,Vue Router 会根据路由规则找到对应的组件,并将其渲染到页面上。

网页访问

现在,你的Vue应用已经运行在本地开发服务器上,并且可以通过浏览器访问。

  • 访问开发服务器:打开浏览器,访问 http://localhost:8080(或你开发服务器运行的其他端口)。
  • 加载和渲染:浏览器加载HTML页面(通常是 index.html),然后Vue应用接管页面的渲染。Vue Router 会根据当前URL加载相应的组件,并将其渲染到页面上。

从项目启动到网页访问的过程涉及多个步骤和组件的交互,包括:

  1. 运行 npm run serve 启动开发服务器。
  2. webpack 编译和打包项目文件。
  3. 在 main.js 中创建Vue实例并挂载根组件。
  4. Vue Router 管理路由和组件加载。
  5. 浏览器访问开发服务器并加载Vue应用。

这些步骤共同构成了Vue项目从启动到网页访问的完整流程。

相关推荐
ggdpzhk2 分钟前
VUE:基于MVVN的前端js框架
前端·javascript·vue.js
小曲曲1 小时前
接口上传视频和oss直传视频到阿里云组件
javascript·阿里云·音视频
学不会•2 小时前
css数据不固定情况下,循环加不同背景颜色
前端·javascript·html
EasyNTS3 小时前
H.264/H.265播放器EasyPlayer.js视频流媒体播放器关于websocket1006的异常断连
javascript·h.265·h.264
活宝小娜5 小时前
vue不刷新浏览器更新页面的方法
前端·javascript·vue.js
程序视点5 小时前
【Vue3新工具】Pinia.js:提升开发效率,更轻量、更高效的状态管理方案!
前端·javascript·vue.js·typescript·vue·ecmascript
coldriversnow5 小时前
在Vue中,vue document.onkeydown 无效
前端·javascript·vue.js
我开心就好o5 小时前
uniapp点左上角返回键, 重复来回跳转的问题 解决方案
前端·javascript·uni-app
刚刚好ā6 小时前
js作用域超全介绍--全局作用域、局部作用、块级作用域
前端·javascript·vue.js·vue
yqcoder7 小时前
reactflow 中 useNodesState 模块作用
开发语言·前端·javascript