前端工程化之规范篇

138 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情

image.png

模块规范

首先有一个概念:前端工程化和Node密切相关
WebNode都是一种JS运行环境,web开发更多是ESM编码,二Node开发使用CJS编码

怎么理解模块化? 一个模块就是一个文件

拆分:将代码根据功能拆分为多个可复用模块
加载:通过指定方式加载模块并执行与输出模块
注入:将一个模块的输出注入到另一个模块
管理:因为工程模块数量众多需管理模块间的依赖关系

为什么要模块化?(优点)

① 隔离作用域
②提供复用性
③提高可维护性
④解决命名冲突
⑤抽离公共代码

模块方案的对比

image.png

☆ 目前最多关注:CJSESM

image.png

  • 使用type指定模块方案

    • package.json中指定typecommonjs,则使用CJS
    • package.json中指定typemodule,则使用ESM
  • 使用--input-type指定入口文件的模块方案,与type一样

    • 命令中加上--input-type=commonjs,则使用CJS
    • 命令中加上--input-type=module,则使用ESM
  • 支持新文件后缀.cjs

    • 文件后缀使用.cjs,则使用CJS

mjs文件使用ESM解析,cjs文件使用CJS解析,js文件使用基package.json指定的type解析(type=commonjs使用CJS,type=module使用ESM)

代码规范

代码规范马上想到一个检验工具:Lint

Lint其实就是编辑器中运行的一个脚本进程,将代码解析为抽象语法树,遍历抽象语法树并通过预设规则做一些判断与改动,再将新的抽象语法树转换为正确代码。

怎么做?
部署VSCode的代码格式化
① 安装

# stylelint及其依赖 
npm i stylelint stylelint-config-standard stylelint-order postcss-html postcss-scss postcss-less
# eslint及其依赖 
npm i @babel/core @babel/eslint-parser @babel/preset-react eslint eslint-config-standard eslint-plugin-html eslint-plugin-import eslint-plugin-n eslint-plugin-promise eslint-plugin-react eslint-plugin-react-hooks eslint-plugin-vue vue-eslint-parser

② 配置文件
Stylelint的配置文件可同时校验html/css/scss/less/vue文件
Eslint需配置不同文件分别校验html/js/ts/jsx/tsx/vue文件
两个插件可在settings.json中通过指定字段覆盖默认配置

③ 配置插件 打开VScode - 插件栏 - 搜索安装StylelintEslint

提交规范

就是Git规范
可以了解一下Angular提交规范

① 格式:HeaderBodyFooter三个内容(header必填,后两个选填)

<type>(<scope>): <subject> 
# 空一行 
<body> 
# 空一行 
<footer>

Header

  • type:用于说明commit的提交类型,必选
  • scope:用于说明commit的影响范围,可选
  • subject:用于说明commit的细节描述,可选

type: image.png

scope:
主要说明你改动的影响度,例如功能上:数据层/视图层/控制层;交互上:组件/布局/流程/视图/页面

subject:
四个字-言简意赅

  • 以动词开头
  • 使用第一人称现在时
  • 首个字母不能大写
  • 结尾不能存在句号(.)

实例:

feat(View): 新增主题皮肤切换按钮 
feat(View): new the button for theme skin switching

Body

对subject的详细补充,内容应包括改动动机改动前后对比

Footer

该部分只适用两种情况,分别是不兼容变动问题关闭

不兼容变动:当前代码与上一版本不兼容,则以BREAKING CHANGE开头,关联变动描述、变动理由和迁移方法
问题关闭:当前代码已修复某些Issue,则以Closes开头,关联目标Issue

② 了解基本规范格式后,当然也可以借助一些工具提高规范效率
commitizencommitlint