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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

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

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

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

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

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

如何与病毒搏斗?这部BBC“史诗级大片”告诉你答案

来源:惠在湖北 我们知道,在目前没有特效药和疫苗的情况下,被治愈的新型冠状病毒肺炎患者,离不开医学的帮助,而治愈的关键,依靠的是人体自身的免疫力。病毒是如何入侵的?免疫力从何而来&#xff…

markdown 行内公式_使用Markdown快速编辑公众号技巧之mdnice

请使用 Chrome 浏览器。请阅读下方文本熟悉工具使用方法,本文可直接拷贝到微信中预览。1 Markdown Nice 简介支持自定义样式的 Markdown 编辑器支持微信公众号、知乎和稀土掘金欢迎扫码回复「排版」加入用户群2 主题https://preview.mdnice.com/themes/欢迎提交主题…

AI人必看!89页全网最全清华知识图谱报告(附PDF)

来源:智东西知识图谱(Knowledge Graph)是人工智能的重要分支技术,它在2012年由谷歌提出,成为建立大规模知识的杀手锏应用,在搜索、自然语言处理、智能助手、电子商务等领域发挥着重要作用。知识图谱与大数据…

AI战“疫”!人工智能在疫情中的重要作用

来源:腾讯新闻网新冠肺炎疫情牵动着全国人民的心!在防控疫情部署落实工作中,上海着力将人工智能等现代信息技术深入应用于疫情态势研判、传播路径分析、精准防控、有效治疗及后续治理等各工作环节。通过提供更加精准有效的科学决策依据&#…

linux 判断指针是否可读_Linux进程间通信——消息队列

概念什么是消息队列?消息队列亦称报文队列,也叫做信箱。是Linux的一种通信机制,这种通信机制传递的数据具有某种结构,而不是简单的字节流。消息队列的本质其实是一个内核提供的链表,内核基于这个链表,实现了…

【人工智能】中科院2019全球人工智能发展白皮书!八大关键技术中国崛起中,国产AI芯片耀眼...

来源:产业智能官人工智能是一个很宽泛的概念,概括而言是对人的意识和思维过程的模拟,利用机器学习和数据分析方法赋予机器类人的能力。人工智能将提升社会劳动生产率,特别是在有效降低劳动成本、优化产品和服务、创造新市场和就业…

斜度符号标注_几何作图之斜度和锥度

虽然机件的形状各有不同,但它们的图样基本上都是由直线、圆弧和其它一些曲线所组成的几何形体。因此在绘图时,常常要运用一些几何作图方法。斜度和锥度1.斜度(GB/T 4458.4-2003)斜度是指一直线(或平面)对另一条直线(或平面)的倾斜程度&#x…