VUE 3.0项目文件结构解析及项目启动流程介绍
VUE 3.0项目文件结构以及项目启动流程介绍
VUE 3.0项目文件结构解析
- VUE 3.0项目文件结构以及项目启动流程介绍
- 前言
- 一、VUE 3.0项目文件结构
- 1.1 Vue 3.0 项目根目录
- 1.2 特别说明
- 二、 VUE 3.0项目文件具体介绍
- 2.1 node_modules文件夹
- 2.2 public文件夹下index.html
- 2.3 src文件夹
- 2.3.1 src/main.js文件
- 2.3.2 src/App.vue文件
- 2.3.3 src\components\HelloWorld.vue文件
- 三、VUE项目启动
- 3.1 VUE项目启动流程详解
- 3.1.1 执行npm run serve
- 3.1.2 执行vue-cli-service serve
- 3.1.3 Webpack打包、动态生成HTML文件
- 四、VUE组件风格
- 4.1 选项式API与组合式API
- 4.1.1 选项式API
- 4.1.2 组合式API
- 4.1.3 API风格选择问题
- 总结
前言
很久之前写了一篇关于VUE环境搭建以及项目初建的文章:配置VUE环境过程中 npm报错的处理方案以及VUE环境搭建过程。本文将详细介绍VUE 3.0项目文件结构及项目启动流程介绍。
一、VUE 3.0项目文件结构
VUE 3.0项目新建后,VUE CLI会生成如下所示的内容:
1.1 Vue 3.0 项目根目录
- 以下为显示主要文件夹以及主要文件:
hello-world
├──node_modules # 项目依赖包(通过 npm/yarn 安装,包含 Vue 核心、第三方库等,不提交 Git)
├── public #静态资源文件夹(不打包)(webpack 打包时直接复制到 dist 根目录,通过 /xxx 路径引用,如 favicon.ico、robots.txt)
│ ├── favicon.ico
│ └── index.html
├── src #源代码文件夹(核心业务代码)
│ ├── App.vue # 项目根组件(页面布局入口,包含路由出口 )
│ ├── assets # 静态资源(不经过 webpack 处理,需通过绝对路径引用)
│ │ └── logo.png
│ ├── components # 通用组件(非业务绑定,可复用,如 Button 按钮、Input 输入框、Modal 弹窗、Pagination 分页)
│ │ └── HelloWorld.vue
│ └── main.js # 项目入口 JS(初始化 Vue 实例、挂载根组件、引入全局依赖)
├── .gitignore #
├── babel.config.js # Babel 配置文件(ES6+ 语法转译,适配低版本浏览器)
├── jsconfig.json
├── package-lock.json # 依赖版本锁定文件(确保团队开发环境依赖版本一致)
├── package.json # 项目核心配置(依赖管理、脚本命令、项目描述)
├── README.md # 项目说明文档(如项目介绍、启动步骤、目录说明、贡献指南)
└── vue.config.js # Vue 项目自定义配置(如端口号、代理、资源路径、插件配置)
1.2 特别说明
src 文件夹:项目开发的核心目录,几乎所有业务代码都在此编写,需重点关注 views(页面)、components(组件)、store(状态)、router(路由)四大模块的逻辑关联。实际上页面views、状态store、路由router文件夹本身是没有自动创建的,根据项目需要自行创建。
二、 VUE 3.0项目文件具体介绍
2.1 node_modules文件夹
项目依赖包(通过 npm/yarn 安装,包含 Vue 核心、第三方库等,不提交 Git) 这个文件夹是基于项目作者的npm版本库生成依赖信息。这个文件夹的树状结构信息以及以来下载地址等被记录到了package-lock.json 文件里。
package-lock.json 文件内容片段:
"node_modules/@aashutoshrathi/word-wrap": {"version": "1.2.6","resolved": "https://registry.npmmirror.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz","integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==","dev": true,"engines": {"node": ">=0.10.0"}},
如果是运行别人的项目,建议删掉node_modules文件夹以及package-lock.json,避免因为npm版本差异导致的报错
2.2 public文件夹下index.html
index.html:是VUE项目的主HTML文件,VUE应用会被挂载到index.html的**div id=“app”**部分
public文件夹下index.html的内容如下所示:
<!DOCTYPE html>
<html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1.0"><link rel="icon" href="<%= BASE_URL %>favicon.ico"><title><%= htmlWebpackPlugin.options.title %></title></head><body><noscript><strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><!-- VUE应用会被挂在到index.html在这个DIV里 --><!-- built files will be auto injected --></body>
</html>
2.3 src文件夹
- src文件夹
是源代码文件夹(核心业务代码) - 项目根组件文件 App.vue
项目根组件(页面布局入口,包含路由出口 ) - 文件夹:assets
静态资源(不经过 webpack 处理,需通过绝对路径引用)默认包含logo.png - 组件文件夹: components
通用组件(非业务绑定,可复用,如 Button 按钮、Input 输入框、Modal 弹窗、Pagination 分页)默认包含一个.vue文件: HelloWorld.vue - main.js
项目入口 JS(初始化 Vue 实例、挂载根组件、引入全局依赖)
2.3.1 src/main.js文件
main.js是VUE项目的入口文件,主要负责初始化Vue实例并将其挂载到 public/index.html的id为app的div里。
main.js文件内容如下:
import { createApp } from 'vue' //导入VUE createApp对象是一个组件,
import App from './App.vue' //导入根组件,每个VUE应用都需要一个根组件,页面布局的入口,其他组件作为这个根组件的子组件,这种导入方式为单文件组件,import App from 'vue文件路径'createApp(App).mount('#app') //应用实例需要调用.mount()方法来实现渲染;.mount(’#id‘)将这个App.vue根组件挂载到public/index.html的id为app的div里
//.mount()方法参数指向的是组件对应的容器,可以是指定是DOM元素或者是CSS选择器字符串
- 应用根组件内容被渲染到指定元素之后,容器元素自己将不会被视为应用的一部分。
通过.mount()方法挂载应用时,是在整个应用配置与资源注册完成后被调用的,其返回值是根组件实例而非应用实例。
2.3.2 src/App.vue文件
App.vue:VUE项目的根组件,页面布局入口,用于组合与渲染其他组件
新建的VUE项目,自动生成的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>
app.vue作为根组件,其模板即template标签部分,本身就是组件的一部分。
也可以在挂载容器内编写模板来单独提供根组件模板。
若跟组件内没有template标签部分,Vue则自动选择使用指定的容器的innerHTML作为组件模板。
容器内部模板常用于无构建的Vue应用程序。
2.3.3 src\components\HelloWorld.vue文件
- src\components文件夹
components文件夹是通用组件所在文件夹(非业务绑定,可复用,如 Button 按钮、Input 输入框、Modal 弹窗、Pagination 分页)默认包含一个.vue文件: HelloWorld.vue - HelloWorld.vue
这是一个示例组件,在App.vue中被引用和渲染。
三、VUE项目启动
VUE项目启动是通过命令npm run serve
项目启动后如果启动成功会有如下提示:
To create a production build, run npm run build.WAIT Compiling... 15:37:14
Compiling...DONE Compiled successfully in 148ms 15:37:14App running at:- Local: http://localhost:8091/- Network: http://192.168.0.164:8091/
通过提示的app running at 信息即可访问到项目。
3.1 VUE项目启动流程详解
3.1.1 执行npm run serve
当执行npm run serve命令时,实际是去执行VUE项目根目录下的package.json
的"scripts"部分指定的serve脚本:
"scripts": {"serve": "vue-cli-service serve","build": "vue-cli-service build","lint": "vue-cli-service lint"},
可以看到 当在命令行窗口执行npm run serve时实际是执行vue-cli-service serve命令
3.1.2 执行vue-cli-service serve
vue-cli-service是VUE CLI提供的开发服务器,会启动一个基于webpack-dev-server的开发环境,支持热重载和实时编译。
3.1.3 Webpack打包、动态生成HTML文件
- Webpack是一个模块打包工具,执行vue-cli-service serve时就是通过Webpack工具将VUE项目所有的模块:VUE文件、JavaScript、CSS等等资源进行打包成一个或多个bundle文件。
- 而当启动基于webpack-dev-server的开发环境时会动态生成一个HTML文件,该文件就会加载VUE项目的入口文件main.js以及其他VUE项目资源的scrip标签。
四、VUE组件风格
4.1 选项式API与组合式API
VUE组件书写风格为选项式与组合式API.
4.1.1 选项式API
包含多个选项的对象来描述组件的逻辑,例如 data、methods 和 mounted。选项所定义的属性都会暴露在函数内部的 this 上,它会指向当前的组件实例。
例在script标签内部,选项式API代码风格如下:
<script>
export default {// data() 返回的属性将会成为响应式的状态// 并且暴露在 `this` 上data() {return {count: 0}},// methods 是一些用来更改状态与触发更新的函数// 它们可以在模板中作为事件处理器绑定methods: {increment() {this.count++}},// 生命周期钩子会在组件生命周期的各个不同阶段被调用// 例如这个函数就会在组件挂载完成后被调用mounted() {console.log(`The initial count is ${this.count}.`)}
}
</script><template><button @click="increment">Count is: {{ count }}</button>
</template>
4.1.2 组合式API
组合式API,可以使用导入的 API 函数来描述组件逻辑。在单文件组件中,组合式 API 通常会与script setup 搭配使用。这个 setup attribute 是一个标识,告诉 Vue 需要在编译时进行一些处理,让我们可以更简洁地使用组合式 API。比如,script setup 中的导入和顶层变量/函数都能够在模板中直接使用。
<script setup>
import { ref, onMounted } from 'vue'// 响应式状态
const count = ref(0)// 用来修改状态、触发更新的函数
function increment() {count.value++
}// 生命周期钩子
onMounted(() => {console.log(`The initial count is ${count.value}.`)
})
</script><template><button @click="increment">Count is: {{ count }}</button>
</template>
4.1.3 API风格选择问题
学习的过程中,推荐采用更易于自己理解的风格。
- 在生产项目中:
当你不需要使用构建工具,或者打算主要在低复杂度的场景中使用 Vue,例如渐进增强的应用场景,推荐采用选项式 API。
当你打算用 Vue 构建完整的单页应用,推荐采用组合式 API + 单文件组件。
总结
以上就是本文内容,介绍了VUE 3.0项目文件结构解析及项目启动流程,顺带介绍了VUE组件的API风格。
更多内容可参考VUE官方资料以及其他网上资料。