eslint规范_代码规范化之Vue篇

v2-f4d936bfe4dfcfdebfd12f6eead23080_1440w.jpg?source=172ae18b

写在前面

代码规范化的重要性不在这里展开了。这一篇讲了Vue项目下如何做代码规范化的事情,主要涉及了eslint、prettier、husky+lint-staged、onchange、editorConfig这几个角色。

另外,虽然配置限于Vue项目,但整个思路也可以作为其他项目代码规范的借鉴!

希望你是vscoder~,因为接下来的配置实践都是在vscode中。

如果你来自其他编辑器,也提供了onchange的方法作为备用。

你需要提前准备:

  • vscode插件:ESLint、Vetur、EditorConfig for VS Code
  • node.js v8.10.0及以上

方法论

开始这个话题深入之前,有设定了几个期许目标:

  1. 已有成熟规范作为主体
  2. 支持自定义,自定义优先级大于规范主体(每个团队有自己的特别癖好)
  3. 配置放在项目级别(不要求统一团队成员的编辑器配置)

后来在看了why precise commits后,对具体的“发生形式”增加两个考虑维度。

formate/lint + auto-fix 发生形式:

  1. 在保存时(ctrl+s)
  2. hook(比如 Pre-commit hook)

formate/lint + auto-fix 作用对象/粒度:

  1. 当前编辑文件
  2. Staged files(git add 之后)的整个文件

实践

项目都由 Vue CLI 脚手架生成,当前版本:4.1.2

方法一

生成项目

按下面步骤走你。

v2-e693672daf2a3bbdb3ae8ce293e38840_b.jpg
选择Manually select features

v2-f9d4ea85ab60f856804e05e10d87aa22_b.jpg
选择相关的Babel和Linter / Formatter

v2-6dcfeb7988335f9de5835c098b26afa5_b.jpg
选择 ESLint + Prettier

v2-2a2ee29cb24766c2cc0082d9abc6a8b9_b.jpg
选择上 Lint on save 和 Lint and fix on commit

最后一个选择配置文件是单独出来,还是放在package.json,选择 In dedicated config files。

补补改改

在工作空间添加插件配置:

  • how?根目录新建vscode文件夹,里面新建settings.json文件,以下是settings.json内容;.gitignore中 把 .vscode 给去掉!
  • why?满足插件配置放在项目级别的期许目标
{"editor.codeActionsOnSave": {"source.fixAll.eslint": true},"vetur.validation.template": false
}

修改.eslintrc.js配置:

  • how?extends字段内容由"plugin:vue/essential"改为"plugin:vue/recommended"
  • why?看eslint-plugin-vue available rules ,"plugin:vue/essential" 仅包含Base Rules和Priority A:Essential,"plugin:vue/recommended" 包含Base Rules、Priority A:Essential、Priority B: Strongly Recommended、Priority C: Recommended。想要有vue/attributes-order 和 vue/order-in-components,so...
module.exports = {root: true,env: {node: true},extends: ["plugin:vue/recommended", "@vue/prettier"],rules: {"no-console": process.env.NODE_ENV === "production" ? "error" : "off","no-debugger": process.env.NODE_ENV === "production" ? "error" : "off"},parserOptions: {parser: "babel-eslint"}
};

增加.eslintignore忽略文件配置:

build/*.js
node_modules/*

增加 .prettierrc.js prettier配置文件:

module.exports = {"semi": false,"arrowParens": "always","singleQuote": true
}

关闭生成项目内置的eslint-loader

  • how? 通过 vue.config.js 关闭 vue-cli lintOnSave
  • why? eslint-loader做 formate/lint + auto-fix 的前提是把项目跑起来,和使用eslint插件或者onchange npm包两种形式相比,不具有优势,且会增加编译的时间
module.exports = {lintOnSave: false
}

方法二

生成项目

按下面步骤走你~

v2-e693672daf2a3bbdb3ae8ce293e38840_b.jpg
依然是选择Manually select features!

v2-fbf3c9455cf912474e313979cda13892_b.jpg
这次不再选择Linter / Formatter

依然选择 In dedicated config files!

补补

prettier in eslint

  • 需要npm包:babel-eslint、eslint、eslint-plugin-vue、prettier、eslint-config-prettier、eslint-plugin-prettier、vue-eslint-parser

eslint配置文件.eslintrc.js

module.exports = {env: {"browser": true,"node": true,"es6": true},extends: ["eslint:recommended",'plugin:vue/recommended',"plugin:prettier/recommended","prettier/vue"],parser: "vue-eslint-parser",parserOptions: {"parser": "babel-eslint"},rules: {"no-console": process.env.NODE_ENV === "production" ? 2 : 0,"no-debugger": process.env.NODE_ENV === "production" ? 2 : 0}
};

忽略文件.eslintignore

build/*.js
node_modules/*

prettier配置文件.prettierrc.js

module.exports = {"semi": false,"arrowParens": "always","singleQuote": true
}

编辑器配置文件.vscode/settings.json

{"editor.codeActionsOnSave": {"source.fixAll.eslint": true},"vetur.validation.template": false
}

.vscode.gitignore中去除!

hook

  • 需要npm包:husky、lint-staged
  • 一个命令完事:npx mrm lint-staged
  • 修改下package.jsonlint-staged的内容
  "lint-staged": {"*.{js,vue}": ["vue-cli-service lint","git add"]}

其他

增加 onchange 候选方案,需要提前跑一下添加eslint-watch的命令:

  • how?yarn add onchange -D 安装 onchange包,其次在package.json添加脚本命令:"eslint-watch": "onchange 'src/**/*.{js,vue}' -- eslint --fix {{changed}}"
  • why?实践章加入的formate/lint + auto fix的发生形式需借助vscode ESLint插件,考虑到成员使用webstorm等编辑器,本方案不给出其他编辑器配置,仅提供onchange方案,保证在其他编辑器中也有丝滑体验!

增加.editorConfig编辑器配置文件,注意 vscode下需要 EditorConfig for VS Code插件:

  • how? 拷贝了 Vue项目的配置
# EditorConfig helps developers define and maintain consistent
# coding styles between different editors and IDEs
# editorconfig.orgroot = true[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true[*.md]
insert_final_newline = false
trim_trailing_whitespace = false

小结

这一套机制集成了这些功能:

  • formate/lint on save + auto-fix:eslint插件代理
  • formate/lint on save + auto-fix:onchange,备胎
  • hook:husky+lint-staged
  • 编辑器配置:.editorConfig

回过头来看一下最初设定的几个期许目标:

  1. 已有成熟规范作为主体:eslint-plugin-vue + prettier
  2. 支持自定义,自定义优先级大于规范主体:在.eslintrc.js中自定义eslint配置,在.prettierrc.js中自定义prettier配置
  3. 配置放在项目级别:配置基本都在根目录下,vscode插件配置也放在了工作空间,即.vscode文件夹下

Done!

有错误/补充还请指正!

参考链接

  • ESLint doc
  • vscode eslint
  • Prettier doc
  • lint-staged readme
  • EditorConfig
  • 知乎-使用husky避免糟糕的git commit

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

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

相关文章

maven常用插件功能

maven-dependency-plugin http://maven.apache.org/plugins/maven-dependency-plugin/ maven-dependency-plugin最大的用途是帮助分析项目依赖,dependency:list能够列出项目最终解析到的依赖列表,dependency:tree能进一步的描绘项目依赖树,de…

人类为什么不会被人工智能取代?

来源:人机与认知实验室〔摘要〕文章旨在对人工智能的技术本质进行分析,以回应为什么人类不会被人工智能取代的问题。通过历史分析的方法,以“器官投影说”等技术哲学思想作为分析工具,回顾了人工智能技术的历程。发现在理论上&…

工作组服务器操作系统,工作组服务器操作系统

工作组服务器操作系统 内容精选换一换弹性云服务器操作系统无法正常启动时,或云服务器系统运行正常,但需要对系统进行优化,使其在最优状态下工作时,用户可以使用重装弹性云服务器的操作系统功能。重装操作系统后弹性云服务器IP地址…

270 扩展固态硬盘_游戏人的扩展坞应该是怎样?

为何现在越来越多的游戏爱好者开始使用游戏扩展坞?原因其实很简单,如今游戏笔记本也慢慢往轻薄本发展,拓展坞的加入可让笔记本实现台式机的玩机体验,通过扩展坞可以实现现在许多游戏本不具备的功能,比如外接超高清显示…

几十亿打水漂!世界最大移动通信展MWC因疫情33年来首次取消,多方损失惨重...

资料来源:新智元、AI前线物联网智库 整理发布转载请注明来源和出处北京时间2月13日早晨(今晨),世界移动通讯展(MWC)主办方GSMA正式宣布取消原定于本月24日至27日在西班牙巴塞罗那举办的MWC2020展会。这也是…

eslint vscode 自动格式化_vscode保存代码,自动按照eslint规范格式化代码设置

vscode保存代码,自动按照eslint规范格式化代码设置编辑器代码风格一致,是前端代码规范的一部分。我们现在前端绝大部分都在使用eslint,或者将要把代码改为eslint,那么此时我们怎么方便使用这个规范呢,下面我来介绍一下…

虚拟化服务器类型,虚拟化服务器类型

虚拟化服务器类型 内容精选换一换本次Ceph集群使用TaiShan服务器部署,三个Ceph节点采用三台为TaiShan 200服务器(型号2280);K8s节点两台均采用TaiShan 200服务器(型号2280)。每台服务器配备4个SAS HDD,一块用做OS盘,三块用作存储盘…

异常01

一、异常对象的产生原因和处理方式 二、异常的抛出 1 public class Demo01 {2 /*3 * Throwable:Exception、Error4 * Exception->RuntimeException5 * 异常中的关键字:throw,在方法内部,抛出异常6 * 7 * 方法中声明…

核酸和CT同时用, 听谁的?——兼释一天新增一万多

笔者两天前的文章 新冠病毒检验的可信度和概率预测分析了为什么核酸检验会漏报,为什么要使用CT辅助确诊。今天爆出新闻,新增确诊约15000人,但是其中临床13332人。临床以前是疑似和确诊之间的病人,为什么这么多临床病人都算是确诊&…

access update语句执行_统一VBA中SQL语句执行的方法

要在 Access 中用 VBA 中执行操作查询,在不创建查询对象的前提下,一般主要有3种方法:1. Access本身的方法:DoCmd.RunSQL strSQL2. DAO的方法:CurrentDb.Execute strSQL3. ADO的方法:CurrentProject.Connect…

算子基本思想_2.2 量子力学基本假设 Part 2

目录页:https://zhuanlan.zhihu.com/p/133306966这次文章主要介绍第三公设的一些应用2.2.4 区分量子态(Distinguishing quantum states)第三公设的一个重要应用就是区分量子态。在宏观世界,一个物体的不同状态至少在原则上是可以区分的。打个比方&#x…

一个人越聪明他大脑皮层神经元之间的联系就越少

来源:科学杂志 这是波鸿鲁尔大学的神经科学家与ErhanGen博士和Christoph Fraenz博士合作进行的一项研究的结果。这项研究是使用特定的神经影像技术进行的,该技术可在微观结构水平上洞悉大脑的连线。波鸿生物心理学研究小组的团队与阿尔伯克基新墨西哥大学…

力扣题目学习笔记(OC + Swift)21. 合并两个有序链表

21. 合并两个有序链表 链表解题经典三把斧: 哑巴节点栈快慢指针 此题比较容易想到的解法是迭代法,生成哑巴节点,然后迭代生成后续节点。 方法一、迭代法 Swift func mergeTwoLists(_ list1: ListNode?, _ list2: ListNode?) -> Li…

git查询当前目录下的文件列表_linux下查找文件,看这篇就够了

linux下文件查找命令用法总结。前言我们经常需要在linux系统中查找一个文件,或需要知道哪些文件包含已知的特有信息,便于快速对比排查、分析问题,那么如何准确高效查找呢?其实在linux下可查找文件的命令不止一个,命令附…

hive xmlserde_hive多分隔符

hive在建表时,通常使用ROW FORMAT DELIMITEDFIELDS TERMINATED BY "|#" 来限定数据中各个字段的分隔符,这种方式只支持单个分隔符,即:实际只会按照"|"进行分割,若想实现支持多分隔符,有…

Algorithm-Gossip(4) 三色棋(Three_Color_Flag)

前言 This Series aritcles are all based on the book 《经典算法大全》; 对于该书的所有案例进行一个探究和拓展,并且用python和C进行实现; 目的是熟悉常用算法过程中的技巧和逻辑拓展。 提出问题 Algorithm Gossip: 三色棋(Three_Color_Flag&#xff…

人工智能如何推动神经科技发展?

来源 | Forbes作者 | Margaretta Colangelo编译 | 科技行者神经科技以人类神经系统原理为基础,旨在研究人类大脑这一极为复杂的模型架构。在实际作用方面,神经科技将帮助研究人员了解大脑功能与引发功能障碍的原因,并助力医生治疗各类神经系…

tomcat lifecyclelistener_继续,来聊聊Tomcat的容器

作者:不学无数的程序员链接:https://urlify.cn/jYZFFf在这篇文章《Tomcat是如何运行的?整体架构又是怎样的?》中我们简单介绍了容器的概念,并且说了在容器中所有子容器的父接口是Container。在死磕Tomcat系列(2)——En…

java 绘制长方形_Java入门:绘制简单图形

在上一节,我们学习了如何使用swing和awt工具创建一个空的窗口,本节学习如何绘制简单图形。基本绘图介绍Java中绘制基本图形,可以使用Java类库中的Graphics类,此类位于java.awt包中。在我们自己的java程序文件中,要使用…

web面试常见问题补充

jquery Ajax $ajax({ Url:”test.html”,-----发送请求的地址 Async:true;------异步操作 Cache:true,-----可以从缓冲中加载 Type:”GET”,------请求方法 Datatype:”json”,-------服务器返回数据类型 Sucess:function(data){ ----------调用成功语句 If(data”OK”){ Conso…