前端项目文件组织与组件命名

前端项目文件组织与组件命名

2019年04月02日 19:25:06 w18478272407 阅读数:14

缘由

在开发项目的过程中,大家多多少少会对自己项目的目录结构产生疑惑,如何合理地划分模块以及如何合理的命名,这些如果在项目前期的时候没有好好规范好的话,那么后面新进来的人便会按照自己的逻辑又重新在划分自己的目录,这样日复一日项目体积不但会增加而且目录结构会越来越混乱,因此非常有必要聚焦项目的文件目录,本文也是出于这样的一个出发点来写的,先来看看几个优秀项目的目录。

crate-react-app



├── package.json
├── public
│   ├── favicon.ico
│   ├── index.html
│   └── manifest.json
└── src
    ├── App.css
    ├── App.js
    ├── App.test.js
    ├── Lazy.js
    ├── index.css
    ├── index.js
    ├── logo.svg
    └── serviceWorker.js
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

create-react-app是非常的简洁,只包含了src以及public2个目录。

@vue/cli



├── package.json
├── public
│   ├── favicon.ico
│   └── index.html
└── src
    ├── App.vue
    ├── assets
    │   └── logo.png
    ├── components
    │   └── HelloWorld.vue
    └── main.js
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

vue的cli也是如出一辙。

nuxt



├── assets
├── components
│   └── Logo.vue
├── layouts
│   └── default.vue
├── middleware
├── nuxt.config.js
├── package-lock.json
├── package.json
├── pages
│   └── index.vue
├── plugins
├── server
│   └── index.js
├── static
│   └── favicon.ico
└── store
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

相对于SPA应用,MPA应用特别是同构应用来说,目录结构也是很清晰的。

那么如何组织文件才合理呢?

答案便是组件化,一切以组件为核心来建立相应的文件目录,这里有几种划分组件的方式:

1、公共组件与业务组件:

一般比较常用的划分方式便是有公共用到的组件便往上提升一级,遇到部分页面用到的组件的话有可能放到跟页面同级也有可能直接放到最上面的一级,例如:



├── common
│   ├── Footer
│   ├── Header
│   └── Slider
└── pages
    ├── _common
    │   └── banner
    ├── index
    └── info
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

这种优点的话比较灵活,但是局部的公共部分你很难去界定。

2、BEM组件划分

这种的话组件划分的比较清晰。



├── Blocks
│   ├── Avatar
│   │   ├── index.js
│   ├── Button
│   │   ├── index.js
│   ├── Header
│   │   ├── index.js
│   │   └── style.scss
├── Elements
│   ├── DownloadBtn.js
│   ├── Logo.js
└── Icons
    ├── Audience.js
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

将组件强势得分为3类,这种结构上虽然非常清晰,但是在项目开发的过程中你不得不频繁地将组件在Block跟Elemens之间移来移去,降低了开发体验。

3、容器组件与展示型组件



├── components
│   ├── Banner
│   ├── Footer
│   └── Header
├── containers
│   ├── ArticleDetail
│   └── CommentList
└── screens
    └── home
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

这里就要看你怎么定义什么是容器组件跟展示型组件了,对于日常的开发来说,这2者是没有强制的边界的,两者之间可以随意切换,也并不是说展示组件一定非得是纯组件,也不一定是说容器组件一定非得有状态跟生命周期,而对于本人来说,一个很好的准则就是展示组件是为了解耦,容器组件是为了内聚。

4、样式组件与逻辑组件

如果项目中有用到css-in-js之类的工具,如styled-component,想必会想到样式放在哪里这个问题,于是便会出现如下情况:



./
└── Avatar
    ├── index.js
    └── styles
        └── styleWrapper.js
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这就会多出来一种逻辑出来。

那么有没有统一的一种方式来规范好组件的文件目录呢?

答案是有的,这种是基于以上几种划分方式来的,通常开发一个组件的时候有可能被认定为样式组件或者容器组件,那么我们这时就不把它们分开,而是所有的组件都放在components目录下面,再根据模块进行划分,所有的页面都是通过模块组件进行组合,最外层的页面组件则是应该是最简洁以及少代码量的。如下:



├── components
│   └── User
│       ├── Avatar
│       │   ├── images
│       │   ├── index.js
│       │   └── style.scss
│       ├── InfoCard
│       │   ├── images
│       │   ├── indexjs
│       │   └── style.scss
│       └── LoginBox
│           ├── reaList
│           │   ├── images
│           │   ├── index.js
│           │   └── style.scss
│           ├── index.js
│           └── style.scss
└── screens
    └── home
        └── index.js
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

例如在用户模块这个目录下,有头像、信息卡以及登陆框的情景,我们限定image、js、scss分别在每个组件目录下,这样做的话,单个组件如果要迁移的话就可以非常方便的移动了,这里再说明下LoginBox下面的AreaList,如果再LoginBox要添加功能的话,那么直接就在这个组件添加,也非常方便地扩展了。

最后至于文件如何命名

这个要看项目组如何规定,但有个通用原则是如果是类的话必须是首字母大写,我上面的例子,由于组件也可以看成是一个类,因此大写是比较清晰的,至于组件的命名,有个比较流行的方式叫path-base-naming,就是基于文件路径来命名,例如在home/index.js 里面命名AreaList的话就可以这样:



import LoginBoxAreaList from ‘../../components/LoginBox/AreaList‘;
  • 1
  • 2
  • 3
  • 4

但如果在LoginBox目录下命名就不再需要这么长了.



import AreaList from ‘./AreaList‘;
  • 1
  • 2
  • 3
  • 4

总结

最后基于这种分模块的方式,开发者可以自由的将容器组件或者展示组件分布在各个独立的组件文件夹之中,可以说规范和灵活性都得到了保障。

参考

https://medium.com/@dan_abram...
https://hackernoon.com/struct...

来源:https://segmentfault.com/a/1190000018717822

原文地址:https://www.cnblogs.com/mouseleo/p/10975386.html

时间: 2024-10-17 06:39:24

前端项目文件组织与组件命名的相关文章

用gulp构建你的前端项目

前言 前端技术发展日新月异,随着模块化.组件化的提出,前端变得越来越复杂,静态资源越来越多,那么对静态资源的处理,如压缩,合并,去掉调试信息.. 如果还是人工去处理,效率非常之低且还容易出错,于是自动化的处理工具也就必然出现了.就像后端我们一般用maven管理项目,那么前端gulp是个不错的选择. 什么是gulp 是一个基于 Node.js 流.Javascript语法的快速构建前端项目并减少频繁的 IO 操作的自动化工具. Gulp有什么好处 易于学习使用 通过最少的API(核心.src().

前端项目从0到1的感悟

确定框架.技术点 一个项目的开始,特别是丰富多样的前端工程,首先一定要确定好采用的框架和技术点.2016年vue.js如火如荼,webpack强势崛起,但是是否就可直接拿到项目中搞起呢?答案是否定的,一个新的技术如果自己或团队中成员都还在学习摸索的过程,是肯定不能在生产环境中使用的,更何况这是个创业的团队,没有成熟完整的前端团队.所以我当时还是走老套路,jquery为核心,fastclick辅助,requireJs按需加载,arttemplate做模板渲染,核心UI类库使用jqueryWeUI,

前端项目结构设计精细方案

开始的开始,前端项目很简单,html放外面,然后新建一个css和js文件夹,看起来很清晰. 随着时间推进,项目变大,问题开始一一出现了: html 太多,找起来麻烦 css 和 js 需要压缩 css 和 js需要发布到 CDN 开始只简单依赖一个jQuery,后来发现依赖的插件越来越多,不好更新维护 html 里面怎么实现公共一个头 js和css包含大量重复代码,怎么重构项目 前端如何把代码交付给后端填模板代码 很多公司面对这些问题都有了自己的方案,Node 因为语言也是JS,成了很多公司的首

Angular01 通过angular-cli来搭建web前端项目

准备前提:已经搭建好angular-cli环境,还未搭建好的请参见三少的博客(开发基础分类) 1 新建一个文件夹 该文件夹用来存放所有利用angular-cli搭建的web前端项目 2 启动命令窗口,并进入该文件夹 3 创建新项目 ng new 项目名称 注意:项目名称最好全部用字母 3.1 到文件夹中去查看项目是否成功创建 4 通过文本编辑器打开src文件夹下的index.xml文件 三少使用sublime打开的效果如下 4.1 代码详解 这就是一个html文件 我们的应用会在app-root

前端开发组织结构及文件命名

一个前端项目的通用目录组织如下: css文件夹 css文件命名用"-"分隔单词,与bootstrap文件命名类似(bootstrap-theme.css) 目录组织结构详细如下: js文件夹 js文件命名用"-"分隔单词,与jquery文件命名类似(jquery-2.1.4.js)同css文件命名一致 目录组织结构详细如下: plugins文件夹 此文件夹存放所有相关插件,每一个插件都新建一个对应的文件夹存放即可 详细目录结构如下: views文件夹 此文件夹存放所

前端项目的开展

前端项目两大教训: 1,凡涉及第三方部门都可能耗费几天甚至更长.第三方提供的接口几乎无验证的.此问题普遍存在. 2,后台研发人员前端技术匮乏,在前端主要覆盖静态页面(CSS+HTML)时,后端研发人员处理静态页面与后台的交互,和业务处理,效率低下,束手无策,问题频出. 第一个问题:跨部门,我们无力解决,我个人经验是,先找对方开发,如果不甩你,向领导反馈:有笔记本的带电脑的去找对方开发.把问题解决就完事. 第二个问题:需培养出合格的后台web developer. 第一阶段: 1,编码:“一刀切”

gulp + webpack 构建多页面前端项目

修改增加了demo地址 gulp-webpack-demo 之前在使用gulp和webpack对项目进行构建的时候遇到了一些问题,最终算是搭建了一套比较完整的解决方案,接下来这篇文章以一个实际项目为例子,讲解多页面项目中如何利用gulp和webpack进行工程化构建.本文是自己的实践经验,所以有些解决方案并不是最优的,仍在探索优化中.所以有什么错误疏漏请随时指出. 使用gulp过程中的一些问题,我已经在另外一篇文章讲到了 grunt or gulp 前言 现在为什么又整了一个webpack进来呢

github上值得关注的前端项目

github上值得关注的前端项目 http://microjs.com/# 该网站的资源都托管到了github,microjs.com是一个可以让你选择微型的js类库的网站,该网站里的js库都是压缩后不大于5KB的,非常实用 https://plainjs.com/(10.22更新) The Vanilla JavaScript Repository,该仓库都是用原生js写的插件和组件,很实用.里面的项目也都托管到了github 综合/资源 frontend-dev-bookmarks 一个巨大

使用vue2.x+webpack+vuex+sass+axios+elementUI等快速搭建前端项目框架

一.本文将分享如何快速搭起基于webpack+vue的前端项目框架,利用vue的自己的脚手架工具vue-cli搭建起基本的环境配置,再通过npm包管理工具引入相应的依赖来完善项目的各种依赖框架.下面是具体实操. 二.基本命令操作. 1.在开发之前需要首先安装node.js,直接百度搜索或者在其中文官网也可以下载http://nodejs.cn/download/, 在装完node之后npm包管理工具也自动的安装好,安装完之后,在命令行输入node -v或者npm -v,出现版本号说明安装成功.如