前端工程工具链

news/2024/11/14 21:10:26/文章来源:https://www.cnblogs.com/wpshan/p/18546817

为了提高整体开发效率,首先要将一些代码规范考虑在内,需要保持git仓库的代码就像是一个人写出来的。根据团队习惯,考虑后使用组合工具:eslint + stylelint + prettier + husky

  1. eslint: 对js做规则约束。强制校验
  2. stylelint: 对css做规则约束
  3. prettier: 代码格式化。强制格式化
  4. husky:本地的git钩子工具

另外敏捷开发过程中,代码复查是至关重要的一环,团队需要使用工具辅助代码分析。经比较和实践后,使用工具:jsinspect + jscpd

  1. jsinspect: 对js或jsx代码做重复检测。强制校验
  2. jscpd: 对代码重复率进行报告总结,辅助代码复查

eslint

1. 安装

npm install --save-dev eslint eslint-plugin-vue babel-eslint

2. .eslintrc.js配置

module.exports = {root: true,// 指定代码的运行环境。不同的运行环境,全局变量不一样
    env: {browser: true,node: true},parserOptions: {// ESLint 默认使用Espree作为其解析器,安装了 babel-eslint 用来代替默认的解析器parser: 'babel-eslint'},// 使得不需要自行定义大量的规则
    extends: [// consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules.'plugin:vue/essential'],// 插件
    plugins: ['vue'],// add your custom rules here
    rules: {// allow async-await'generator-star-spacing': 'off',// allow debugger during development'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off','indent': [2, 4, { 'SwitchCase': 1 }],...}}

3. 提交前强制校验

将约束命令放置在提交代码前检查,这就要使用husky这个工具,该工具能在提交代码precommit时调用钩子命令。

"scripts": {"lint": "eslint --ext .js,.vue --ignore-path .gitignore .","precommit": "npm run lint"
}

prettier

  1. 安装
npm install --save-dev prettier
  1. .prettierrc.js配置
module.exports = {printWidth: 100, // 设置prettier单行输出(不折行)的(最大)长度
tabWidth: 4, // 设置工具每一个水平缩进的空格数
useTabs: false, // 使用tab(制表位)缩进而非空格
semi: false, // 在语句末尾添加分号
singleQuote: true, // 使用单引号而非双引号
trailingComma: 'none', // 在任何可能的多行中输入尾逗号
bracketSpacing: true, // 在对象字面量声明所使用的的花括号后({)和前(})输出空格
arrowParens: 'avoid', // 为单行箭头函数的参数添加圆括号,参数个数为1时可以省略圆括号
parser: 'babylon', // 指定使用哪一种解析器
jsxBracketSameLine: true, // 在多行JSX元素最后一行的末尾添加 > 而使 > 单独一行(不适用于自闭和元素)
rangeStart: 0, // 只格式化某个文件的一部分
rangeEnd: Infinity, // 只格式化某个文件的一部分
filepath: 'none', // 指定文件的输入路径,这将被用于解析器参照
requirePragma: false, // (v1.7.0+) Prettier可以严格按照按照文件顶部的一些特殊的注释格式化代码,这些注释称为“require pragma”(必须杂注)
insertPragma: false, //  (v1.8.0+) Prettier可以在文件的顶部插入一个 @format的特殊注释,以表明改文件已经被Prettier格式化过了。
proseWrap: 'preserve' // (v1.8.2+)
}

3. 提交前强制格式化

在提交git时需要对整个项目执行format格式化,使得代码强制统一。格式化之后再用eslint检查语法错误,无误后把格式化后的代码用git add .添加进入。如果有错误直接中断提交。

"scripts": {"format": "prettier --write './**/*.{js,ts,vue,json}'","lint": "eslint --ext .js,.vue --ignore-path .gitignore .","precommit": "npm run format && npm run lint && git add ."
}

stylelint

安装

npm install --save-dev stylelint

使用

  1. 新增.stylelintrc文件

  2. 在文件中设置规则,以下是笔者部门使用的css规范

{"rules": {# 缩进 4 个空格"indentation": 4,# 去掉小数点前面的 0"number-leading-zero": "never",# 使用双引号"string-quotes": "double",# 每个属性声明末尾都要加分号"declaration-block-trailing-semicolon": "always",# 属性值 0 后面不加单位"length-zero-no-unit": true,# 对空行的处理# 第一条属性声明前不允许有空行"declaration-empty-line-before": ["never",{ ignore: [ "after-declaration" ] }],# 每个样式规则前后都有空行,除了第一条规则与规则前有注释"rule-empty-line-before": ["always",{ except: [ "after-single-line-comment", "first-nested" ] }],# 在结尾 "}" 之前不允许有空行"block-closing-brace-empty-line-before": [ "never" ],# "@" 语句之前都有空行,但是忽略 "@" 语句在代码块中间与同个非代码块 "@" 语句之间的空行这两种情况"at-rule-empty-line-before": ["always",{ ignore: [ "inside-block", "blockless-after-same-name-blockless" ] }],# 不允许超过一行的空行"max-empty-lines": 1,# 每行句末不允许有多余空格"no-eol-whitespace": true,# 文件末尾需要有一个空行"no-missing-end-of-source-newline": true,# 大小写处理"unit-case": "lower","color-hex-case": "upper","value-keyword-case": "lower","function-name-case": "lower","property-case": "lower","at-rule-name-case": "lower","selector-pseudo-class-case": "lower","selector-pseudo-element-case": "lower","selector-type-case": "lower","media-feature-name-case": "lower",# 对空格的处理# "{" 前必须有空格"block-opening-brace-space-before": "always",# 注释 "/*" 后和 "*/" 前必须有空格"comment-whitespace-inside": "always",# 属性名 ":" 后必须有空格"declaration-colon-space-after": "always",# 属性名 ":" 前不能有空格"declaration-colon-space-before": "never",# 声明属性末尾 ";" 前不能有空格"declaration-block-semicolon-space-before": "never",# 属性值中的 "," 后必须有空格"function-comma-space-after": "always",# 选择器例如 ">、+、~" 前后必须要有空格"selector-combinator-space-before": "always","selector-combinator-space-after": "always",# 分隔多个选择器之间的 "," 后必须有空格"selector-list-comma-space-after": "always",# 分隔多个选择器之间的 "," 前不能有空格"selector-list-comma-space-before": "never",# 子代选择器之间没有额外空格"selector-descendant-combinator-no-non-space": true,# 多个属性值之间的 "," 后必须有空格"value-list-comma-space-after": "always",# 多个属性值之间的 "," 前不能有空格"value-list-comma-space-before": "never",# 媒体查询中设置断点宽度里的 ":" 后必须有空格"media-feature-colon-space-after": "always",# 媒体查询中设置断点宽度里的 ":" 前不能有空格"media-feature-colon-space-before": "never"}
} 

规则检查

stylelint 'src/**/*.vue' --fix

stylelint命令有时候无法解析到,因为使用了全局的sylelint,这时可以指定相对路径./node_modules/.bin/stylelint

提交git时检查

需要用到插件husky,该插件会在git提交时,执行npm run precommit命令,所以需要在package.json中添加如下代码检查:

"lint": "eslint --quiet --ext .js,.vue src",
"style": "stylelint 'src/**/*.vue' --fix",
"precommit": "npm run lint && npm run style",

添加例外

在stylelint使用过程中,有时候会对某条css添加例外,不要适用规则或部分规则

关闭全部规则:

/* stylelint-disable */
a {}
/* stylelint-enable */

关闭部分规则:

/* stylelint-disable selector-no-id, declaration-no-important   */
#id {color: pink !important;
}
/* stylelint-enable */ 

自动修复

有些项目是开发到一半时,添加了StyleLint进行css约束,这时候需要自动化对不满足条件的Rule进行修复,如下是使用到的几种:

1.--fix命令

该命令能fix大部分格式问题,具体哪些规则可以自动fix可以看这里

2.Vetur插件--格式化文件

优点是可以统一格式化文件,缺点是只能单个文件操作

3.vscode-stylefmt插件

类似Vetur插件,但该插件可定制化更多,详情请移至github

4.stylefmt

该工具也是官方推荐,可以批量修改,使用如下命令修改,详情见 github

stylefmt --stdin-filename input.css

jsinspect

1. 安装

npm install jsinspect --save-dev

2. 提交前强制校验

"scripts": {"format": "prettier --write './**/*.{js,ts,vue,json}'","lint": "eslint --ext .js,.vue --ignore-path .gitignore .","inspect": "jsinspect -t 50 ./src","precommit": "npm run format && npm run lint && npm run inspect && git add ."
}

jscpd

1. 安装

npm install jscpd --save-dev

2. 代码复查辅助命令

"scripts": {"codereview": "jscpd ./src"
}

 

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

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

相关文章

Dosbox-x安装WinXP——图文教程

很多老游戏只能在win95、98或者XP中运行,因此,很多人尝试将Win95、98安装到Dosbox中,利用Dosbox来玩那些久远的情怀。有Win98自然就有人想在Dosbox中安装更高级的Win系统,于是就有人尝试在Dosnox中安装Win2000、WinXP的,其中2023-07-03在国外的fabulous.systems出现了一篇…

ABB AC900F学习笔记331:使用ST做自定义功能块,计算最近60秒的分钟均值和最近60分钟的小时均值

前面自己学习了在西门子TIA使用SCL编程,施耐德Unity中使用ST编程做分钟均值和小时均值的方法,今晚在家练习了在ABB Freelance中自定义功能块使用ST语言做分钟均值和小时均值。 新建项目、插入硬件、仿真器、操作站等不做介绍。新建一个用户功能块池,下面建一个功能块类。功能…

DBeaver如何设置自动刷新数据库表的数据,彻底解放双手!

前言 大家好,我是小徐啊。 DBeaver是一款常用的数据库连接工具,它的优点是免费使用,而且支持的数据库类型超级多,甚至可以直接安装数据库对应的驱动jar包来连接数据库。 比如达梦数据库,之前版本是可以通过jar包方式设置驱动来连接达梦数据库的。好了,言归正传,今天小徐…

Intellij IDEA如何设置中文版?安装中文汉化包插件?失败问题解决!

前言 大家好,我是小徐啊。 Intellij IDEA默认是英文的操作界面,因为是外国人开发的嘛~对于英文好一点的同学来说,英文就英文吧,但对于英文比较差的同学,就还是希望能够汉化一下,变成熟悉的中文。今天小徐就来介绍下如何在IDEA中安装汉化插件,以及在这过程中,我遇到的奇…

TCP_UDP

TCP, UDP Flood 攻击原理TCP Flood攻击配置环境Windows Server 2016配置服务器管理器,创建一个Web服务器并开启该服务器功能kali配置 vim /etc/network/interfacesifup eth0 开启网络 查看Kali ip 信息:修改路由器信息: 拓扑关系如下所示:GNS 3 中修改路由器 R1:GNS3 中修改…

Python用CEEMDAN-LSTM-VMD金融股价数据预测及SVR、AR、HAR对比可视化

全文链接:https://tecdat.cn/?p=38224 原文出处:拓端数据部落公众号分析师:Duqiao Han股票市场是一个复杂的非线性系统,股价受到许多经济和社会因素的影响。因此,传统的线性或近线性预测模型很难有效、准确地预测股票指数的价格趋势。众所周知,深度学习通过逐层特征转换…

java 反序列化 cc4 复现

java 反序列化 cc4 复现复现环境:jdk<=8u65,commonsCollections=4.0 CommonsCollections4.x版本移除了InvokerTransformer类不再继承Serializable,导致无法序列化.但是提供了TransformingComparator为CommonsCollections3.x所没有的,又带来了新的反序列化危险. cc4的执行命令…

ICMP 重定向攻击

ICMP 重定向攻击原理 ICMP (Internet Control Message Protocol) :Internet 控制报文协议,用于在 IP 主机和 路由器之间传递控制消息(控制消息指网络是否通、主机是否可达、路由器是否可用等)ICMP 重定向 在某些特定情况下,路由器在检测到主机使用非优化路由时,会向主机发送…

java 反序列化 cc3 复现

java 反序列化 cc3 复现版本要求:jdk版本<=8u65,common-collections版本<=3.2.1 在很多时候,Runtime会被黑名单禁用.在这些情况下,我们需要去构造自定义的类加载器来加载自定义的字节码. 类加载机制 双亲委派 这里直接粘别人的了.实现一个自定义类加载器需要继承 ClassLo…

使用Tailwind CSS的几个小Tips

前情 Tailwind CSS 是一个原子类 CSS 框架,它将基础的 CSS 全部拆分为原子级别。它的工作原理是扫描所有 HTML 文件、JavaScript 文件以及任何模板中的 CSS 类名,然后生成相应的样式代码并写入到一个静态 CSS 文件中。Tailwind CSS 快速、灵活、可靠、没有运行时负担。自从接…

给朋友写的爬Steam游戏评论的爬虫

详见配图如果你需要的话,可以从这里下载(包括程序、说明和演示视频): https://pan.baidu.com/s/1lN-DNTB7pVXan94hCsqYUQ?pwd=72mg(本来想传蓝奏云的,但是蓝奏云不支持传图片和视频,而且单文件大小有限制,弄起来会比百度云盘还麻烦)

apisix~限流插件的使用

参考:https://i4t.com/19399.html https://github.com/apache/apisix/issues/9193 https://github.com/apache/apisix/issues/9830 https://apisix.apache.org/docs/apisix/plugins/limit-conn/ https://blog.frankel.ch/different-rate-limits-apisix/在 Apache APISIX 中,限…