03.ElementUI源码学习:代码风格检查和格式化配置ESlint & Prettier

03.ElementUI源码学习:代码风格检查和格式化配置(ESlint & Prettier)

2021-04-17 01:51  Anduril  阅读(329)  评论(0)  编辑  收藏

6af6b714a2be4f8cb1d99f8b91287429~tplv-k3u1fbpfcp-watermark.image在团队协作中,为避免低级Bug、以及团队协作时不同代码风格对彼此造成的困扰与影响,会预先制定编码规范。使用 Lint工具和代码风格检测工具,则可以辅助编码规范执行,格式化代码,使样式与规则保持一致,有效控制代码质量,实现项目代码风格统一。

书接上文。在团队协作中,为避免低级Bug、以及团队协作时不同代码风格对彼此造成的困扰与影响,会预先制定编码规范。使用 Lint工具和代码风格检测工具,则可以辅助编码规范执行,格式化代码,使样式与规则保持一致,有效控制代码质量,实现项目代码风格统一。

在代码格式化方面, Prettier 和 ESLint 有重叠,但两者侧重点不同:ESLint 所能提供的格式化功能很有限;而 Prettier 在格式化代码方面具有更大优势。而 Prettier 被设计为易于与 ESLint 集成,所以在项目中使用两者,无需担心冲突。。

0x00.Prettier 概览

配置文件

Prettier 支持几种格式的配置文件,优先级顺序如下:

  1. package.json 里创建一个 prettier 属性,在那里定义你的配置.
  2. 使用 .prettierrc,可以使 JSON 也可以是 YAML。
  3. 使用 .prettierrc.json, .prettierrc.yml, .prettierrc.yaml,.prettierrc.json5 去定义配置的结构.
  4. 使用 .prettierrc.js, .prettierrc.cjs, prettier.config.js, prettier.config.cjs 去定义配置的结构--必须使用 module.exports 暴露对象.
  5. 使用 .prettierrc.toml 去定义配置的结构.

.prettierignore

在根目录下加一个.prettierignore文件实现文件级别的忽略(语法同.gitignore)。

⭐ autocrlf解决跨系统diff问题

Windows 使用回车(CR)和换行(LF)两个字符来结束一行,而 macOS 和 Linux 只使用换行(LF)一个字符,会极大地扰乱跨平台协作。

Unix/Mac用户

carbon (2).png

Windows 用户

carbon (3).png

0x01.ESlint 概览

配置文件

ESLint 支持几种格式的配置文件:

  • JavaScript - 使用 .eslintrc.js 然后输出一个配置对象。
  • YAML - 使用 .eslintrc.yaml.eslintrc.yml 去定义配置的结构。
  • JSON - 使用 .eslintrc.json 去定义配置的结构,ESLint 的 JSON 文件允许 JavaScript 风格的注释。
  • (弃用) - 使用 .eslintrc,可以使 JSON 也可以是 YAML
  • package.json - 在 package.json 里创建一个 eslintConfig 属性,在那里定义你的配置。

如果同一个目录下有多个配置文件,ESLint 只会使用一个。优先级顺序如下:

  1. .eslintrc.js
  2. .eslintrc.yaml
  3. .eslintrc.yml
  4. .eslintrc.json
  5. .eslintrc
  6. package.json

配置文件常用属性 root env parserOptions parser extends plugins rules 等功能配置如下:

root 属性

ESLint 会在所有父级目录里寻找配置文件,一直到根目录。一旦发现配置文件中有 "root": true,它就会停止在父级目录中寻找。

env 属性

使用 env 关键字指定想启用的环境,并设置它们为 true。环境并不是互斥的,所以可以同时定义多个。
更多可用的环境列表

parserOptions 属性

解析器选项使用 parserOptions 属性设置。可用的选项有:

  • ecmaVersion - 默认设置为 3,5(默认), 你可以使用 6、7、8、9 或 10 来指定你想要使用的 ECMAScript 版本。你也可以用使用年份命名的版本号指定为 2015(同 6),2016(同 7),或 2017(同 8)或 2018(同 9)或 2019 (same as 10)
  • sourceType - 设置为 "script" (默认) 或 "module"(如果你的代码是 ECMAScript 模块)。
  • ecmaFeatures - 这是个对象,表示你想使用的额外的语言特性:
    • globalReturn - 允许在全局作用域下使用 return 语句
    • impliedStrict - 启用全局 strict mode (如果 ecmaVersion 是 5 或更高)
    • jsx - 启用 JSX
    • experimentalObjectRestSpread - 启用实验性的 object rest/spread properties 支持。(重要:这是一个实验性的功能,在未来可能会有明显改变。 建议你写的规则 不要 依赖该功能,除非当它发生改变时你愿意承担维护成本。)

parser 属性

在配置文件中指定一个不同的解析器。在使用自定义解析器时,为了让 ESLint 在处理非 ECMAScript 5 特性时正常工作,配置属性 parserOptions 仍然是必须的。解析器会被传入 parserOptions,但是不一定会使用它们来决定功能特性的开关。

extends 属性

通过声明扩展配置、启用规则。

extends 的属性值可以是:

  • 指定配置的字符串(配置文件的路径、可共享配置的名称、eslint:recommendedeslint:all)
  • 字符串数组:每个配置继承它前面的配置

extends 属性值可以使用短名称,省略包名的前缀 eslint-config-

carbon (5).png

值为 "eslint:recommended" extends 属性启用一系列核心规则,在 规则页面中被标记为✔️。
值为 "eslint:all" extends 属性启用当前安装的 ESLint 中所有的核心规则,不推荐在产品中使用

plugins 属性

插件是一个 npm 包,通常输出规则。一些插件也可以输出一个或多个命名的 配置(Configs)
plugins 属性值可以使用短名称,省略包名的前缀 eslint-plugin-

carbon (6).png

插件打包配置

插件在 configs 键下指定打包的配置,且支持多配置。

carbon (4).png

示例插件名为 eslint-plugin-myPlugin,那么 myConfigmyOtherConfig 配置可以分别从 "plugin:myPlugin/myConfig""plugin:myPlugin/myOtherConfig" 扩展出来。

此时 extends 属性值由以下组成:

plugin: + 包名 (省略了前缀 myPlugin ) + / + 配置名称 (myConfig)

carbon (7).png

在默认情况下,配置不会启用插件中的任何规则。必须在 plugins 数组中指定插件名,extends 数组中指定想使用的插件中的规则。任何插件中的规则必须带有插件名或其简写前缀。

官方文档 Configs in Plugins

rules 属性

rules 属性启用额外的规则、改变规则的级别和选项。
要改变一个规则设置,必须将规则 ID 设置为下列值之一:

  • "off" 或 0 - 关闭规则
  • "warn" 或 1 - 开启规则,使用警告级别的错误:warn (不会导致程序退出)
  • "error" 或 2 - 开启规则,使用错误级别的错误:error (当被触发的时候,程序会退出)

.eslintignore

过在项目根目录创建一个 .eslintignore 文件告诉 ESLint 去忽略特定的文件和目录。.eslintignore 文件是一个纯文本文件,其中的每一行都是一个 glob 模式表明哪些路径应该忽略检测。

0x02.项目配置

prettier 配置

在项目中安装 prettier

carbon (8).png

在根目录下创建 .prettierrc.js 配置文件 。

carbon (11).png

在根目录下创建 .prettierignore 文件 。

carbon (12).png

执行指令,格式化整个项目。

carbon (13).png

成功执行后,输出文件列表,被格式化的文件名称 白色高亮

微信截图_20210416214937.png

eslint 配置

安装 eslint和相关插件 eslint-config-prettier eslint-plugin-prettier eslint-plugin-vue,让Prettier 和 ESLint更好的一起工作。

npm install --save-dev eslint

npm install --save-dev eslint-config-prettier eslint-plugin-prettier   

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

在根目录下创建 .eslintrc.js 配置文件 。

module.exports = {
  root: true,
  env: {
    node: true,
    browser: true,
  },
  parserOptions: {
    ecmaVersion: 6,
    sourceType: 'module',
    ecmaFeatures: {
      jsx: true,
    },
  },
  extends: ['plugin:vue/essential', 'eslint:recommended', 'prettier'],
  plugins: ['vue', 'prettier'],
  rules: {
    'prettier/prettier': 'error',
    'arrow-body-style': 'off',
    'prefer-arrow-callback': 'off',
  },
} 

ℹ️ eslint-config-prettier 8.0.0 版本之后, 直接声明 "prettier" 就可以使用所有的插件。
8.0.0 更新日志

https://github.com/prettier/eslint-config-prettier#special-rules
https://github.com/prettier/eslint-plugin-prettier#recommended-configuration

在根目录下创建 .eslintignore 文件 。

carbon (16).png

项目运行后,若文件格式不符合规范,编辑器窗口有提示出现

微信截图_20210417013312.png

光标移到问题行,会显示问题类型,可以点击快速修复选项来修复问题。

微信截图_20210417013429.png

最新目录结构

carbon (18).png

0x03.示例代码

Github Repo

参考

ESLint配置:https://cn.eslint.org/docs/user-guide/configuring
Prettier配置:https://prettier.io/docs/en/configuration.html
Git自定义配置:https://git-scm.com/book/zh/v2/自定义-Git-配置-Git
Glob模式简介: https://www.cnblogs.com/savorboard/p/glob.html

原文地址:https://blog.51cto.com/u_13483473/2799139

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


el-menu 有个属性 :default-active="curActive"  el-menu-item有个属性:index=“home”这2个属性值对上号就自动定位了data(){ return{ curActive:"home" }; },
基础用法1<el-inputv-model="input1"palcehoder="请输入"></el-input>23varMain={4data(){5return{6input1:''7}8}9}10varCtor=Vue.extend(Main)11newCtor().$mount('#app&#03
 1.安装element-uinpminstallelement-ui-S 2.在main.js中importElementUIfrom'element-ui'import'element-ui/libheme-chalk/index.css'Vue.use(ElementUI)注意index.css的路径不要出错:在node_modules文件夹里node_modules\element-ui\lib\theme-c
layout布局通过基础的24分栏,可进行快速布局基础布局使用单一分栏创建基础的栅格布局,通过span属性指定每栏的大小<el-col:span="8"></el-col>1<el-row>2<el-col:span="8"><divclass="grid-contentbg-purple"></div>&
 今天做一个选择年份的功能,直接调用了ElementUI里面的DatePicker组件,官网上有该组件的用法介绍,讲得很清楚。 我的代码: 官网说明: 奇怪的事情发生了,我明明按照例子写了  value-format="yyyy" 可是获得的值却一直还是Date对象 仔细检查后,我突然发现我的v-model
  that.end 即为结束日期
vueelementUitree懒加载使用详情2018年11月21日11:17:04开心大表哥阅读数:3513 https://blog.csdn.net/a419419/article/details/84315751 背景:vue下使用elementUI文档:http://element-cn.eleme.io/#/zh-CN/componentree#tree-shu-xing-kong-jian需求:只保存二
环境搭建说明:1、全局安装angluar脚手架npminstall-g@angular/cli2、初始化项目(支持scss)ngnew项目名称--style=scss//进入项目cd项目名称运行代码可以是:serve或者npminstall(安装依赖)npmstart(运行)3、安装elementnpm
1、在写埋点监控项目的时候,需求是表格里面的数据后台传递过来为0,但是要求显示的时候为—,在elementUI判断,将prop去掉在下面加上<templateslot-scope="scope"><emplate>里面在写vue的判断,因为通过Scopedslot可以获取到row,column,$index和store(table内容的状态管理)的数据。2、
<el-table-columnprop="pubArea"//表格data中对应的字段column-key="pubArea"//过滤条件变化时根据此key判断是哪个表头的过滤label="报修类型"align="center"width=
1.npminstallbabel-plugin-component-D   然后.babelrc替换plugins 文件就在根目录下  2.组件中英文及自定义中英文importVueI18nfrom'vue-i18n'importenLocalefrom'element-ui/lib/locale/lang/en'importzhLocalefrom'element-ui/lib/locale/lang/zh-C
 <el-treeref="tree":data="menu.treeData":props="menu.defaultProps":filter-node-method="filterNode":expand-on-click-node=&quot
2019独角兽企业重金招聘Python工程师标准>>>使用vue+elementui的tree组件,elementui官网elementui的tree组件问题描述:tree层级过多时左右不可滚动问题解决:修改overflow属性值.el-tree-node>.el-tree-node_children{overflow:visible;} 其他相关链接:css--ov
首先elementUI的导航栏中的选中项的高亮显示时的字体颜色可以在属性中设置,但是高亮时的背景颜色不能设置,所以要自己修改高亮的背景颜色.el-menu-item.is-active{background-color:#00b4aa!important;} 在使用elementUI构建vue项目的时候会遇到页面刷新的时候子路由会保
1.首先创建Vue项目(使用vue-cli进行创建)创建项目文章指导地址: https://blog.csdn.net/assiduous_me/article/details/892086492.ElementUI:一套为开发者、设计师和产品经理准备的基于Vue2.0的桌面端组件库 链接地址:http://element.eleme.io/#/zh-CN3.正式开
使用vue开发项目,用到elementUI,根据官网的写法,我们可以自定义主题来适应我们的项目要求,下面来介绍一下两种方法实现的具体步骤,(可以参考官方文档自定义主题官方文档),先说项目中没有使用scss编写,用主题工具的方法(使用的较多)第一种方法:使用命令行主题工具使用vue-cli安装完项目并引
每页显示的序号都是一样的:<el-table:data="tableData"highlight-current-row@current-change="handleCurrentChange"><el-table-columntype="index"width="50"></el-table-column><el-table>根据
  记录一下自己踩的坑,控制element内的table的某列显示隐藏不能用v-show,而是要用v-if具体网上百度了,看一下v-show和v-if的区别吧猜测:由于el-table-column会生成多行标签元素,根据v-show是不支持template语法的,推断v-show不能显示隐藏多个元素 
样式重置单vue文件中重置全局重置多写一个style不加scrop,可能会影响全局样式待补充table单价数量小计3252?在ElementUI中,我需要获取row内的数据并进行计算,需要用到v-slot<el-table-columnlabel="小计"><templatev-slot="scope">{{scop
工作需要做一个带滑块效果的导航栏,初步想法是用element的导航组件去做,后面摸坑结合各位大佬的博客初步实现效果,话不多说,直接上代码,记录一下爬坑之旅1<template>2<divclass="y-nav">3<el-rowclass="nav">4<el-menu5:default-active="$route.