前端项目怎样治理

前端项目如何治理

前端项目标治理分为两个维度:项目内的治理与多项目之间的治理。

1. 项目内的治理

在一个项目内,当有多个开辟者一同合作开辟时,或许功用愈来愈多、项目愈来愈巨大时,保证项目有条有理的举行是相称主要的。

平常会从下面几点来考据一个项目是不是治理得很好:

  • 可扩大性:能够很轻易、清楚的扩大一个页面、组件、模块
  • 组件化:多个页面之间共用的大块代码能够自力成组件,多个页面、组件之间共用的小块代码能够自力成大众模块
  • 可浏览性:浏览性优越(包含目次文件构造、代码构造),能够很快速的找到某个页面、组件的文件,也能快速的看出项目有哪些页面、组件
  • 可移植性:能够轻松的对项目架构举行晋级,或移植某些页面、组件、模块到其他项目
  • 可重构性:对某个页面、组件、模块举行重构时,能够保证在重构以后功用不会转变、不会发生新 bug
  • 开辟友爱:开辟者在开辟某一个功用时,能够有比较好的体验(不好的体验比方:多个文件相隔很远)
  • 合作性:多人合作时,很少发生代码争执、文件掩盖等题目
  • 可交代性:当有人要脱离项目时,交代给其他人是很轻易的

1.1 可扩大性

关于前端项目而言,可扩大性是并不难的,由于许多时刻前端的代码、文件分块都是根据页面来的,所以自然就是一块一块的。

但这里照样要提一下,由于有些开辟者不喜欢分块,把应该分块的东西杂揉在一同,比方:

- src/
  - main/                    # main 目次
    - css/                   # css 鸠合
      - alpha.css
      - beta.css
      - ...
    - js/                    # js 鸠合
      - alpha.js
      - beta.js
      - ...    
    - alpha.html             # alpha 页面
    - beta.html              # beta 页面
    - ...

更好的体式格局:

- src/
  - main/                    # main 目次
    - alpha/                 # alpha 页面
      - index.css            # css 进口文件
      - index.js             # js 进口文件
      - index.html           # html 进口文件
      - ...
    - beta/                  # beta 页面
      - index.css
      - index.js
      - index.html
      - ...
    - ...

使前端项目具有高可扩大性,平常从目次文件构造入手,能够参考:目次构造优化

1.2 组件化

这里的组件化是项目内的组件化,我们能够把多个页面之间共用的大块代码自力成组件,多个页面、组件之间共用的小块代码自力成大众模块。

如许做的目标是为了进步代码的可重用性,防止反复造轮子。别的,也有利于代码之间的解耦。

比方:

- src/
  - data/                    # 常量、静态数据目次
    - data1.js          
    - data2.js
    - ...          
  - components/              # 组件目次
    - componnet1/          
    - componnet2/
    - ...          
  - utils/                   # 东西函数目次
    - util1.js          
    - util2.js
    - ...     
  - ...     

能够参考:组件化

1.3 可浏览性

这里的可浏览性有两个方面:目次文件构造、代码构造。

1.3.1 目次文件构造

目次文件构造可浏览性的好与否除了跟开辟者有关联外,跟项目标搭建者也有很大的关联,由于假如搭建者在最初就定义好全部项目标目次构造,对后期的开辟者是一个很好的束缚。

可浏览性比较差的目次文件构造:

- src/
  - css/                     # css 鸠合
    - main/                  # main 目次
      - alpha.css
      - beta.css
      - ...
  - js/                      # js 鸠合
    - main/                  # main 目次
      - alpha.js
      - beta.js
      - ...
  - html/                    # html 鸠合
    - main/                  # main 目次        
      - alpha.html           # alpha 页面
      - beta.html            # beta 页面
      - ...

可浏览性比较好的目次文件构造:

- src/
  - main/                    # main 目次
    - alpha/                 # alpha 页面
      - index.css            # css 进口文件
      - index.js             # js 进口文件
      - index.html           # html 进口文件
      - ...
    - beta/                  # beta 页面
      - index.css
      - index.js
      - index.html
      - ...
    - ...

关于目次文件构造的高可读性,能够参考:目次构造优化

1.3.2 代码构造

代码构造的可浏览性大部分取决于开辟者的水平,但我们能够运用东西协助开辟者誊写范例、花样优越的代码。

主要有下面的东西:

  • .editorconfig: 一致每一个开辟人员的编辑器设置
  • eslint: 搜检 js 语法(包含 jsx 语法),然后最大水平的改正不相符范例的代码
  • stylelint: 搜检 css 语法(包含 less, scss 语法),然后最大水平的改正不相符范例的代码
  • prettier: 代码花样优化
  • husky + lint-staged: 强迫开辟人员对代码举行搜检、自动改正与优化

上面的详细用法能够参考:

1.4 可移植性

能够的情况下,让项目具有肯定的伸缩性,能够在将来轻松的对项目举行架构晋级。

让项目能够轻松的移植某些页面、组件、模块到其他项目,须要对全部项目代码只管的解耦与模块化。别的,也与背面会讲到的“项目之间的一致性”有关。

1.5 可重构性

对页面、组件的重构是常有的事,但如何保证在重构以后功用不会转变、不会发生新 bug,这就得靠测试用例了。

能够参考:

1.6 开辟友爱

这主如果从目次构造优化动手,比方:

像下面这类目次构造,假如要编辑一个页面,须要随处找页面相干的文件,编辑器上就会构成一个很长的目次树,一点不友爱:

- src/
  - css/                     # css 鸠合
    - main/                  # main 目次
      - alpha.css
      - beta.css
      - ...        # 中心有 30 个页面
  - js/                      # js 鸠合
    - main/                  # main 目次
      - alpha.js
      - beta.js
      - ...        # 中心有 30 个页面
  - html/                    # html 鸠合
    - main/                  # main 目次        
      - alpha.html           # alpha 页面
      - beta.html            # beta 页面
      - ...        # 中心有 30 个页面

而像下面这类目次构造,一切的文件都在一个目次下,找文件就很轻易,而且很清楚:

- src/
  - main/                    # main 目次
    - alpha/                 # alpha 页面
      - index.css            # css 进口文件
      - index.js             # js 进口文件
      - index.html           # html 进口文件
      - ...
    - beta/                  # beta 页面
      - index.css
      - index.js
      - index.html
      - ...
    - ...

1.7 合作性

当项目变大、多人合作时,我们就须要治理好哪些是正在开辟的代码、哪些是提交测试的代码、哪些是已上线的代码、如何防止代码争执与线上新代码被旧代码掩盖等等。

详细能够参考:web 项目如何举行 git 多人合作开辟

1.8 可交代性

当有人要脱离项目时,就须要把他担任的代码交代给他人,但如何才能使交代是轻松愉快的?

那就是文档,包含解释文档、接口文档等。想一想,假如没有文档,该如何交代呢?

能够参考:api 接口治理东西

2. 多项目之间的治理

多个项目之间,如何治理好项目之间联络,比方共用组件、大众模块等,保证快速高效开辟、不反复造轮子,也是很主要的。

平常会从下面几点来考据多个项目之间是不是治理得很好:

  • 组件化:多个项目共用的代码应该自力出来,成为一个零丁的组件项目
  • 版本化:组件项目与运用项目都应该版本化治理,特别是组件项目标版本应该相符 semver 语义化版本范例
  • 一致性:多个项目之间应该运用雷同的手艺选型、UI 框架、脚手架、开辟东西、构建东西、测试库、目次范例、代码范例等,雷同功用应指定运用牢固某一个库
  • 文档化:组件项目肯定须要相干的文档,运用项目在必要的时刻也要构成响应的文档

2.1 组件化

这里的组件化是项目之间的组件化,我们能够把多个项目共用的代码自力出来,成为一个零丁的组件项目。

如许做的目标也是为了进步代码的可重用性,防止反复造轮子。别的,也便于版本化治理组件。

- project1/                  # 项目一
  - package.json
  - src/ 
  - ...
  
- project2/                  # 项目二
  - package.json
  - src/ 
  - ...  
  
- component1/                # 组件一
  - package.json
  - src/ 
  - dist/ 
  - ...
  
- component2/                # 组件二
  - package.json
  - src/ 
  - dist/ 
  - ...    

project1 中运用 component1component2:

# package.json
{
  "dependencies": {
    "component1": "^0.0.1",
    "component2": "^0.0.1"
  }
}

import component1 from 'component1';
import component2 from 'component2';

经常使用组件有:

  • @yourCompany/utils: 东西类
  • @yourCompany/shortcut.css: 快速 css 类
  • @yourCompany/data: 经常使用静态数据

组件化平常会与私有 npm 堆栈一同运用。

能够参考:

2.2 版本化

假如运用项目运用 npm 来治理依靠,就是版本化治理了。

组件项目更不用说了,值得提一下的是组件项目标版本号应该相符 semver 语义化版本范例。

版本花样:主版本号.次版本号.订正号,版本号递增划定规矩以下:

  • 主版本号:当你做了不兼容的 API 修改,
  • 次版本号:当你做了向下兼容的功用性新增,
  • 订正号:当你做了向下兼容的题目修改。

先行版本号及版本编译元数据能够加到“主版本号.次版本号.订正号”的背面,作为延长。

能够参考:

2.3 一致性

多个项目之间应该运用雷同的手艺选型、UI 框架、脚手架、开辟东西、构建东西、测试库、目次范例、代码范例等,雷同功用应指定运用牢固某一个库。

如许做的目标是削减项目之间的环境差别,有利于项目之间的代码移植,也更有利于组件化、代码重用。

能够参考:

2.4 文档化

完美的文档,不管是对组件项目照样运用项目,都是很主要的。

组件项目须要用文档通知开辟者组件怎样用、有哪些接口;运用项目须要用文档来做小组交换、项目交代等。

后续

更多博客,检察 https://github.com/senntyou/blogs

作者:深予之 (@senntyou)

版权声明:自在转载-非商用-非衍生-坚持签名(创意同享3.0许可证

    原文作者:senntyou
    原文地址: https://segmentfault.com/a/1190000018207680
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞