Vue项目的详细目录结构解析

文章目录
前言 —— 一级目录解析
一. dist
二. node_modules
三. public
四. src(基础版)
4.1 main.js
4.2 App.vue
4.3 src / assets
4.4 src / components
五. src(顶配版)
5.1 src / plugins
5.2 src / store
5.3 src / router
5.4 src / views
六. tests
七. .gitignore
八. README.md
九. ...(其他依赖的独立配置信息文件)
附:详细目录结构树
写在最后
前言 —— 一级目录解析
我们在使用Vue CLI 4.0工具创建出一个新的项目后,它最基本的一级目录结构往往是这样子的:

vue-demo
├── dist  //项目构建后的输出目录
├── node_modules
├── public
├── src
├── tests  //选装:测试模块
├── .gitignore
├── package-lock.json
├── package.json
├── README.md
├── ...

dist —— 项目构建打包后的默认输出目录。查看详情 ->
node_modules —— 项目依赖文件,其中包括很多基础依赖和自己安装的依赖。查看详情 ->
public —— 存放公共资源和项目的主入口文件index.html。查看详情 ->
src —— 项目核心文件夹:包括项目源码,各种静态资源等等。是我们开发的重点工作目录。查看详情 ->
test —— 选装了测试模块(Unit Testing / E2E Testing)才会有的文件夹。查看详情 ->
.gitignore —— Git上传时需要忽略的文件目录;查看详情 ->
package-lock.json —— 版本管理使用的文件;
package.json —— 项目的基本配置信息文件,包括各种插件,依赖以及某些依赖的详细配置等(如果你选择保存在这个文件内的话);
README.md —— 项目的描述文件。查看详情 ->
... —— 某些依赖配置信息的独立文件。查看详情 ->
一. dist
dist文件夹在新建项目中一开始并不会存在。只有当你执行过一次构建命令(build)后,才会创建。通常它的内部目录结构为:

vue-demo
├── dist  //项目构建后的输出目录
│   └── css
│   └── img
│   └── js
│   └── index.html  // 项目主入口文件
│   └── ...  // 其他公共资源

这就是我们之前很熟悉的原生开发阶段的目录结构。也是浏览器能直接识别的文件类型。而我们现在使用的Vue.js等框架开发的项目,并不能为浏览器所识别,所以就需要编译打包这一步操作,来转换成实际生产环境(浏览器)所需的文件。

npm run build

该目录文件夹的名称是可自由设置的。比如在Vue UI中直接修改:


有关Vue UI的具体使用可翻上一篇:

【 Vue全家桶 · Vue CLI(三)】使用可视化的Vue项目管理器(Vue UI)来创建、开发和管理你的项目


二. node_modules
node_modules文件夹中存放的是各种项目依赖文件,其中包括很多基础依赖和自己安装的依赖。

vue-demo
├── node_modules
│   └── ...
 


在做代码共享或者上传远程仓库时,建议忽略此文件夹。所以我们在拿到一个Vue项目时,一般都是没有这个文件夹的。需要我们自己使用命令去生成:

npm install

这样他就会去下载项目所需的所有依赖文件。除了基础的依赖文件之外,他还会去识别我们package.json文件中保存的依赖信息并逐一安装。

之后项目开发中,我们也可以根据需要继续增添其他依赖,仍然会保存在node_modules文件夹中。

npm install [依赖包名称]
 

三. public
顾名思义,public文件夹中存放的是项目公共资源。比如网站LOGO等,还会有项目的主入口文件index.html。通常我们不需要对public文件夹内的资源做任何修改。

vue-demo
├── public
│   └── index.html  // 项目主入口文件
│   └── ...  // 其他公共资源

后续在构建打包时,public文件内容会直接放到dist文件夹内。比如:

四. src(基础版)
src文件夹是我们项目的核心文件夹:包括项目源码以及各种静态资源等等。是我们开发的重点工作目录。

如果此时你的项目在创建的时候,并没有选装其他的配置,仅仅是一个最简单的空白项目,那么你的src文件夹应该是这样的:

vue-demo
├── src
│   └── assets  //静态资源
│   └── components  //公共组件
│   └── App.vue  //根组件
│   └── main.js  //入口文件

它们之间具体的调用顺序可以简单概括为下图:
这也是Vue框架最基础的工作原理。后续可以在此基础上继续增添其他的Vue生态产品或插件,比如Vue Router,Vuex或者Element UI组件库等等。

4.1 main.js
main.js文件是一个很重要的文件,是浏览器解析最先加载的入口文件。这个文件的主要功能是通过import的方式导入各种资源,然后新建了一个vue实例。


可以看到这里只导入了两个资源:

Vue框架 —— 从node_modules文件夹中导入;
根组件App —— 从App.vue文件导入;
然后新建了一个vue实例:

new Vue({
  render: h => h(App),  //渲染函数
}).$mount('#app')  //手动挂载

其中渲染函数render: h => h(App)的格式属于ES6的箭头函数写法,它的ES5等价形式为:

render: h => h(App) 

       ||
       
render(h){     
    return h(App);
}

该Vue实例中通过h函数渲染根组件App,并把他手动挂载到id为#app的节点上。该节点位于public目录下的主入口文件index.html中。

其中< div id=“app”></div>将会被根组件App替换掉,即所谓的挂载。

4.2 App.vue
所以进一步加载的是根组件App文件 —— App.vue。之前我们在讲Vue框架入门的时候,说到Vue框架中有一个很重要的核心理念:

组件化开发 —— 每一个Vue页面都可以看作是由组件填充而成的,组件之间支持层级嵌套。

App组件就属于根组件,其他组件的使用均需要由App组件直接或间接引入。这里就继续引入了如下两项资源:

图片logo.png —— 位于src / assets目录;
公共组件HelloWorld —— 位于src / components目录;


4.3 src / assets
src / assets 文件夹内保存的是各种静态资源,比如css、img、js、font等。新建项目的assets文件夹内就只有一张首页上的LOGO图片资源:


4.4 src / components
这里定义的组件都属于公共组件,任意的Vue页面中都可以(多次)调用。后缀为.vue的文件即为组件文件,每一个vue组件通常都由以下三部分组成:

<template>标签 —— HTML模板代码片段;
<script>标签 —— javascript代码;
<style>标签 —— 样式代码(原生CSS / 预处理语言Sass,Less,Stylus);


可以看到原生开发中的三剑客html,js,css都整合在了一个组件文件内(麻雀虽小五脏俱全呀)。这样的开发方案无疑与原生开发区别很大,所以才需要最后的构建打包。

我们在运行这个项目后看到的内容,其实是公共组件HelloWorld的内容:


还有一点是这里用到了子父组件传值。根组件App在调用公共组件HelloWorld时,向下传递了一个msg值:


然后HelloWorld公共组件内通过props方法接收,并渲染。


我们可以来尝试修改msg的值和HelloWorld公共组件内的其他内容。比如:

// App.vue

<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <HelloWorld msg="Welcome ! zevin ."/>
  </div>
</template>

// HelloWorld.vue

<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
  </div>
</template>

现在的页面效果就是这样啦~


五. src(顶配版)
刚才讲的基础版src,如果用来理解Vue框架原理是极好的,不过在实际开发中肯定是不够用的。我们或多或少都会用到Vue生态里的其他产品。

所以就有了顶配版的src,哈哈。详细的目录结构如下:

vue-demo
├── src
│   └── assets  //静态资源
│   └── components  //公共组件
│   └── plugins  //插件资源
│   └── router  //路由配置
│   └── store  //vuex文件
│   └── views  //视图组件
│   └── App.vue  //根组件
│   └── main.js  //入口文件

对比基础版你会发现,这里又多出了四个文件夹:

plugins —— 插件资源;
router —— 路由配置;
store —— vuex文件;
views —— 视图组件;
对应的文件之间的调用图也该丰富一下了。请看下图:


同样的,main.js文件内容也有区别,import导入的资源项变多了:


而且Vue实例中也增加了相应的内容:

new Vue({
  router,  // 注册路由
  store,  // 引入store
  render: h => h(App)
}).$mount('#app')

接下来请继续看这四个文件夹的讲解,来帮助你理解这个图图。

5.1 src / plugins
这个文件夹是你项目开发过程中,手动安装过插件而产生的。比如我这里安装了axios:

5.2 src / store
store文件夹是你选配了Vuex之后才会有的文件,主要用于项目内某些状态的保存。比如state、mutations、actions、getters、modules等。

有关Vuex的详细讲解请看后续更新~

5.3 src / router
在单页面应用中,路由是指:根据不同的链接展示不同的页面视图,可以来回切换。如下图所示:

在看src / router文件之前,先来看看根组件App—— App.vue文件的变化:不再直接调用公共组件了,而是引用了< router-view/>路由。

<template>
  <div id="app">
    <div id="nav">
      <router-link to="/">Home</router-link> |
      <router-link to="/about">About</router-link>
    </div>
    <router-view/>
  </div>
</template>

路由的具体原理是:

根据上边<router-link>标签内to字段的取值,决定了<router-view/>这里具体挂载哪个视图组件。

这种路由链接的对应关系就保存在src/router/index.js文件中。

5.4 src / views
src / views文件夹内存放的是视图组件。选配了Vue Router的新建项目,都会默认有以下两个视图组件:

Home.vue —— 首页版块;
About.vue —— 关于版块;
而在Home.vue中可以看到很熟悉的,和之前基础版中的根组件App.vue相同的模板内容。这样就接上之前基础版的思路啦~

六. tests
选装了测试模块(Unit Testing / E2E Testing)才会有的文件夹。不过我自己对测试没什么研究,也就不班门弄斧了~

七. .gitignore
这个也没什么好说的,也就是罗列一下,之后Git上传时,需要忽略的文件。默认的 .gitignore文件内就总结了挺多,不过大家也可以自由的增删改。

八. README.md
README.md文件是你项目的描述文件。可有可无,不影响什么。它的作用就是:

在你上传为Git远程仓库资源时,比如GitHub。他就会解析你项目根目录下的README.md文件,并展示在你仓库目录的下方。方便别人快速了解你的项目。

举个例子:vuepress-theme-vdoing项目的GitHub仓库地址

九. …(其他依赖的独立配置信息文件)
在创建项目时,如果你选择把依赖的配置信息以独立文件形式存放,那么你的项目内,和package.json文件同级的,就还会有比如.browserslistrc, .eslintrc, babel.config.js, jest.config.js, tsconfig.json等独立配置文件。

附:详细目录结构树
我这里是尽可能全的总结了一个Vue项目的实际目录结构。仅供参考,具体的目录结构请以你们的实际为主。

vue-demo
├── dist  //项目构建后的输出目录
├── node_modules
│   └── ...  // 各类依赖
├── public
│   └── index.html  // 项目主入口文件
│   └── ...  // 其他公共资源
├── src
│   └── assets  //静态资源
│       └── logo.png
│   └── components  //公共组件
│       └── HelloWorld.vue
│   └── plugins  //插件资源
│       └── axios.js
│   └── router  //路由配置
│       └── index.js
│   └── store  //vuex文件
│       └── index.js
│   └── views  //视图组件
│       └── About.vue
│       └── Home.vue
│   └── App.vue  //根组件
│   └── main.js  //入口文件
├── tests  //选装:测试模块
├── .gitignore  //Git上传时需要忽略的文件列表
├── package-lock.json  //版本管理使用的文件
├── package.json  //项目的基本配置信息文件
├── README.md  //项目的描述文件
├── ...  //其他依赖的独立配置信息文件


这一篇中,详细整理了一个标准的Vue项目中每一个目录结构的作用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/82942.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL版数据库原理与应用期末复习重点(3)---画E-R图

文章目录 一、题目一1.1 题目描述1.2 解答 二、题目二2.1 题目描述2.2 解答 一、题目一 1.1 题目描述 设开发一个校园公共自行车管理系统&#xff0c;系统需要达到如下要求&#xff1a; &#xff08;1&#xff09;用户能够注册登录&#xff0c;能够根据借车点的名称查询借车…

【爬虫基础】万字长文详解XPath

1. 引言 XPath&#xff08;XML Path Language&#xff09;是一种在XML和HTML文档中查找和定位信息的强大工具。XPath的重要性在于它允许我们以简洁而灵活的方式导航和选择文档中的元素和属性。本文将深入介绍XPath的基础知识&#xff0c;帮助你掌握这个强大的查询语言&#xf…

若依注册的时候给个默认部门出现获取用户信息异常

想在注册的时候在数据库中查询一个部门给它一个默认部门&#xff0c;结果出现异常——【[handleServiceException,59] - 获取用户信息异常】 经分析代码&#xff0c;此方法有如下注解 以上注解会在mapper.xml中做如下操作 在做此操作之前会进入一个拦截器&#xff0c;根据token…

PHP-composer安装扩展安装,批量操作合并pdf

清除Composer缓存&#xff1a; 运行以下命令来清除Composer的缓存&#xff0c;并再次尝试安装包。 bash composer clear-cache 使用不同的镜像源&#xff1a; Composer使用的默认包源可能会受到限制或访问问题。你可以切换到使用其他镜像源&#xff0c;如阿里云、Composer中国…

安理【2022】

关键字&#xff1a; 出栈序列s2固定、快速排序2趟、next数组、二分查找比较次数log2n向上取整、 一、选择 二、填空 三、应用

系统间远程调用方式的演变

问题&#xff1a; 远程是无法直接传递对象的 怎么解决&#xff1f; txt 没有表现力&#xff0c;结构和内容混杂&#xff0c;无法知道它的结构&#xff1b;报文: 电信信令、EDI国际物流&#xff1b; 晦涩难懂&#xff0c;和行业知识绑定&#xff0c;学习成本高&#xff1b;xm…

蓝桥杯2023年第十四届省赛真题-买瓜--C语言题解

目录 蓝桥杯2023年第十四届省赛真题-买瓜 题目描述 输入格式 输出格式 样例输入 样例输出 提示 【思路解析】 【代码实现】 蓝桥杯2023年第十四届省赛真题-买瓜 时间限制: 3s 内存限制: 320MB 提交: 796 解决: 69 题目描述 小蓝正在一个瓜摊上买瓜。瓜摊上共有 n 个…

Zookeeper 启动失败【Cannot open channel to 3 at election address...】

文章目录 完整报错信息解决方法1.检查文件夹权限2.未监听所有IP3.IP映射名称与 ID 不对应 完整报错信息 Cannot open channel to 3 at election address hadoop121/192.168.10.121:3888 java.net.ConnectException 解决方法 1.检查文件夹权限 检查当前用户是否拥有 Zookeep…

《Kubernetes部署篇:Ubuntu20.04基于containerd部署kubernetes1.25.14集群(多主多从)》

一、架构图 如下图所示: 二、环境信息 1、资源下载基于containerd部署容器版kubernetes1.25.14集群资源合集 2、部署规划主机名K8S版本系统版本内核版本IP地址备注k8s-master-121.25.14Ubuntu 20.04.5 LTS5.15.0-69-generic192.168.1.12master节点 + etcd节点k8s-master-131.…

adb shell命令查看当前屏幕可见最顶层Activity和Fragment及其调用栈

adb shell命令查看当前屏幕可见最顶层Activity和Fragment及其调用栈 &#xff08;1&#xff09;当前屏幕可见页面最顶层是哪个Activity: adb shell "dumpsys activity top | grep ACTIVITY | tail -n 1"&#xff08;2&#xff09;当前屏幕可见页面最顶层是哪个Fragm…

【Redis】深入理解 Redis 事务机制

文章目录 前言一、回顾 MySQL 事务1.1 MySQL 事务的概念与特性1.1 MySQL 事务的管理 二、对 Redis 事务的认识2.1 什么是 Redis 的事务2.1.1 Redis 事务的概念2.1.2 对 Redis 事务的深入理解 2.2 Redis 事务与 MySQL 事务的比较2.2.1 事务的粒度2.2.2 ACID 属性2.2.3 并发控制2…

(图论) 827. 最大人工岛 ——【Leetcode每日一题】

❓ 827. 最大人工岛 难度&#xff1a;困难 给你一个大小为 n x n 二进制矩阵 grid 。最多 只能将一格 0 变成 1 。 返回执行此操作后&#xff0c;grid 中最大的岛屿面积是多少&#xff1f; 岛屿 由一组上、下、左、右四个方向相连的 1 形成。 示例 1: 输入: grid [[1, 0]…

解决Sublime Text用浏览器打开没反应

点击Open in Browser用浏览器打开没反应怎么解决&#xff1f; 点击Browse Packages 会跳转到这个文件夹页面 打开User文件夹 在文件中添加下面代码即可,chrome是默认打开浏览器&#xff0c;可以自定义为你想用的浏览器 { "browser": "chrome" }

Centos7 安装部署 Kubernetes(k8s) 高可用集群

1&#xff1a;基础环境准备 宿主机系统集群角色服务器IP主机名称容器centos7.6master192.168.2.150ks-m1dockercentos7.6master192.168.2.151ks-n1dockercentos7.6master192.168.2.152ks-n2docker 1.1 服务器初始化及网络配置 VMware安装Centos7并初始化网络使外部可以访问*…

华为HCIA学习(一)

文章目录 一.根据考试题总结知识点&#xff08;一题一点&#xff09;二.上午学习三.下午学习四.今天只做了70题&#xff0c;需要的可以找我 一.根据考试题总结知识点&#xff08;一题一点&#xff09; 二.上午学习 ① VRP系统是VRP是华为公司从低端到高端的全系列路由器、交换…

Rust swap

文章目录 /*fn swap<a>(a: &a mut String, b:&a mut String){let tmp *a;*a *b;*b tmp;}let mut a "aaa".to_string();let mut b "bbb".to_string();swap(&mut a, &mut b);*/let mut a 111;let mut b 222;fn swap<a>(a…

探讨基于IEC61499 的分布式 ISA Batch 控制系统

ISA SP88 是批次过程控制的标准&#xff0c;对应的IEC标准是IEC 61512。该标准中一个重要的部分是配方管理&#xff08;Recipe Management&#xff09;。 所谓配方&#xff0c;是根据批量产品的要求&#xff0c;材料设定加工工艺&#xff0c;加工流程和参数。类似于传统制造业的…

Ubuntu 安装redis数据库,并设置开机自启动

1、下载安装包 wget http://download.redis.io/releases/redis-7.0.9.tar.gz 2、解压 tar -zxvf redis-7.0.9.tar.gz 3、复制到解压缩的包移动到/usr/local/ sudo mv ./redis-7.0.9 /usr/local/ 4、编译 cd /usr/local/redis-7.0.9 sudo make 5、测试: 时间会比较长&#xff0…

层次聚类分析

1、python语言 from scipy.cluster import hierarchy # 导入层次聚类算法 import matplotlib.pylab as plt import numpy as np# 生成示例数据 np.random.seed(0) data np.random.random((20,1))# 使用树状图找到最佳聚类数 Z hierarchy.linkage(data,methodweighted,metric…

千呼万唤openGauss资源池化系列培训来了

应openGauss广大用户要求&#xff0c;社区于近期推出openGauss资源池化培训系列。 关于资源池化 资源池化是openGauss 5.0.0 推出的重点特性&#xff0c;是openGauss基于内存池化和共享存储实现的数据库集群。数据在集群的计算节点内存、共享存储中实现共享。应用可以任意节点…