前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >eslint+prettier学习

eslint+prettier学习

作者头像
蓓蕾心晴
发布2020-09-24 16:40:43
2K0
发布2020-09-24 16:40:43
举报
文章被收录于专栏:前端小叙前端小叙

eslint学习

配置文件:.eslintrc.js

常见配置字段

代码语言:javascript
复制
module.exports = {
  'parser':'esprima',
  'env': {
    'browser': true,
    'es6': true,
  },
  'extends': [
    'airbnb',
  ],
  'globals': {
    'Atomics': 'readonly',
    'SharedArrayBuffer': 'readonly',
  },
  'parserOptions': {
    'ecmaVersion': 2018,
    'sourceType': 'module',
    'ecmaFeatures': {
        'jsx': true
     }
  },
  'rules': {
    'semi': 'error'
  },
};

配置字段解析

详情参考文档

extends:[]

配置文件可以从基本配置扩展启用的规则集,不添加则不会继承任何扩展集,仅按照rules下的基本配置来执行。

可以扩展的规则常见的有:

airbnb(世界第一)

安装依赖包

代码语言:javascript
复制
npm install eslint-plugin-jsx-a11y eslint-plugin-react eslint-plugin-import eslint-config-airbnb --save

{
  "extends": "airbnb"
}

规则特点

不去掉分号

自动把import引入的包放在了最上面

不希望有console,有会报警告

if语句如果没有包大括号不会加大括号,会从两行转为一行

多个import后面加一个空行

字符串使用单引号

缩进为2个空格

未定义的变量会报错

箭头函数前后需要空格

未使用的变量会报错

standard(世界第二)

安装依赖包

代码语言:javascript
复制
npm install --save-dev eslint-config-standard eslint-plugin-standard eslint-plugin-promise eslint-plugin-import eslint-plugin-node

{
  "extends": "standard"
}

规则特点

去掉分号

if语句会自动加大括号,两行转为一行

缩进2个空格

字符串使用单引号

自动把import引入的包放在了最上面

多个Import之间有空行,最后一个import之后不会有空行

未定义的变量会报错

箭头函数前后需要空格

未使用的变量会报错

alloy(世界第三)

AlloyTeam ESLint 规则不仅是一套先进的适用于 React/Vue/Typescript 项目的 ESLint 配置规范,而且也是你配置个性化 ESLint 规则的最佳参考。腾讯开源eslint规则,目前主要是对代码规则的校验,不包含格式校验。

代码语言:javascript
复制
npm install --save-dev eslint babel-eslint eslint-config-alloy
module.exports = {
  extends: [
    'alloy',
  ],
  env: {
    // Your environments (which contains several predefined global variables)
    //
    // browser: true,
    // node: true,
    // mocha: true,
    // jest: true,
    // jquery: true
  },
  globals: {
    // Your global variables (setting to false means it's not allowed to be reassigned)
    //
    // myGlobal: false
  },
  rules: {
    // Customize your rules
  },
};
google

安装依赖包

代码语言:javascript
复制
npm install --save-dev eslint-config-google

规则特点

不去掉分号

字符串使用单引号

相对上面两个力度较小,import没有自动提到最上面,

未定义的变量不会报错

缩进为2个空格

箭头函数前后没有空格要求

未使用的变量会报错

eslint:recommended

粒度比较小,依然支持双引号,也没有空格,仅报错了未定义的变量和未使用的变量

eslint:all

粒度相当大,各种空行,console.log里都是换行,if语句里面都是空行,import不会提到前面

plugin:prettier/recommended

即prettier规则。

使用此规则的方式见下面 :eslint+prettier配合配置

大概看出的几个共同点

都会把没有改变过的变量从let定义改为const定义

字符串都转为单引号

该有的空格都有

未使用的变量会报错 

严格程度排名

airbnb>standard>alloy>google

plugins:[]

ESLint支持使用第三方插件。在使用插件之前,您必须使用npm安装它。

插件:

eslint-plugin-html

一个ESLint插件,用于整理和修复HTML文件中包含的内联script脚本,支持多个script标签,此行为不适用于“模块”脚本(即:<script type="module">)

https://www.npmjs.com/package/eslint-plugin-html

配置方式:

在 .eslintrc.js中的plugin中加入html

代码语言:javascript
复制
{
    "plugins": [
        "html"
    ]
}

rules:[]

配合代码规则:

  • "off"0-关闭规则
  • "warn"1-将该规则作为警告打开(不影响退出代码)
  • "error"2-将规则作为错误打开(触发时退出代码为1)

parserOptions:{}

解析器选项,主要用于解析JavaScript的语言选项

ecmaVersion:JavaScript版本

sourceType:script还是module

eslint常用几个命令

eslint --init  **/*.js     初始化创建默认eslint配置

eslint --fix **/*.js       修复问题

注意:使用项目中的eslint,命令为    npx eslint --fix **/*.js

webpack eslint配置

代码语言:javascript
复制
{
  test: /\.js$/,
    use: [
      {
        loader: "babel-loader",
      },
      {
        loader: "eslint-loader",// 这里的配置项参数将会被传递到 eslint 的 CLIEngine
        options: {
          fix: true,// 保存自动格式化开启
          formatter: require('eslint-friendly-formatter') // 指定错误报告的格式规范
        }
      },
    ],
      enforce: "pre",
      include: [path.resolve(__dirname, 'src')], // 指定检查的目录
  },
代码语言:javascript
复制

prettier学习

作用

prettier 主要是为了格式化代码,而在没有 prettier 之前,是用 eslint —fix和 编辑器自带代码格式来进行代码格式化的。

  • 缺点:每种编辑器会有不一样的代码格式,而且配置会比较麻烦。
  • prettier 已经逐渐成为业界主流的代码风格格式化工具。
  • 减轻 eslint 等工具的校验规则,因为将代码样式校验交给了 prettier,所以可以将代码校验的规则更准确地应用到代码真正的规范上面。

安装

First, install Prettier locally:

prettier需要精确安装,

代码语言:javascript
复制
npm install --save-dev --save-exact prettier

Then, create an empty config file to let editors and other tooling know you are using Prettier:

代码语言:javascript
复制
​echo {}> .prettierrc.json​ 

Next, create a .prettierignore file to let the Prettier CLI and editors know which files to not format. Here’s an example:

# Ignore artifacts:

代码语言:javascript
复制
build
coverage

命令

prettier --check **/*.js

prettier --write **/*.js

注意:使用项目中的eslint,命令为 npx prettier --write **/*.js

eslint+prettier配合配置

eslint 是主要还是负责代码规则校验,prettier 只调整代码风格,代码样式,eslint 才是真正检查代码是否符合规范的工具。两者分工不同,所以需要配合使用。

了解配合配置的方式,先来了解几个npm包

插件:

eslint-plugin-prettier

作用:一个形式上跟standard类似的一个代码规则,用来在基础规则上扩展的规则,eslint的rules规则优先级大于prettier的规则。

提示:eslint-plugin-prettier不会为您安装Prettier或ESLint,你必须自己安装。

使用prettier的扩展规则有两种方式:

注意:不需要写extends:"prettier",光下面的配置即可

方式一:

代码语言:javascript
复制
{
  "plugins": ["prettier"],
  "rules": {
    "prettier/prettier": "error"
    // "prettier/prettier": ["error", {"singleQuote": true, "parser": "flow"}] 这里的配置会覆盖.prettierrc.js的配置
    // "prettier/prettier": ["error", {}, {
    //      "usePrettierrc": true
        //  }] // 开启这个配置,可以指定使用.prettierrc.js配置,不会和其他配置冲突
  }
}

方式二:

代码语言:javascript
复制
extends: [
    'plugin:prettier/recommended',
],

两种区别:

方式一:两种规则会有冲突

方式二:两种规则没有冲突,会自动去掉eslint冲突的规则,配置简单。

重点:

如果使用方式二,需配合 eslint-config-prettier

作用:禁用与lint相关的所有格式化规则。

注意:

由于编辑器等自动格式化配置设置了走.prettierrc.js文件,建议写覆盖的配置,写在这里,不要写在.eslintrc.js配置中,否则可能得不到想要的结果。

安装插件:

注意:为了避免不同人安装的的prettier版本不同导致的代码格式化规则不同,建议安装prettier使用精确版本安装。

代码语言:javascript
复制
npm install --save-dev --save-exact prettier 
npm install --save-dev eslint-plugin-prettier eslint-config-prettier

规则冲突示例:

可以看到同一行的同样的错误会抛出两个版本的错误信息

代码语言:javascript
复制
3:19  error  Replace `"axios"` with `'axios';`  prettier/prettier // prettier抛出
3:19  error  Strings must use singlequote       quotes   // esLint抛出

使用方式二后,prettier的规则会覆盖掉standard相同的规则

最终配置

样式格式校验

stylelint

代码语言:javascript
复制
npm install stylelint --save-dev

stylelint-config-prettier

代码语言:javascript
复制
npm install --save-dev stylelint-config-prettier

Then, append stylelint-config-prettier to the extends array in your .stylelintrc.* file. Make sure to put it last, so it will override other configs.

代码语言:javascript
复制
{
  "extends": [
    // other configs ...
    "stylelint-config-prettier"
  ]
}
 

stylelint-config-recommended

所有样式问题都会暴露

代码语言:javascript
复制
npm install stylelint-config-recommended --save-dev

stylelint-config-standard

stylelint-config-standard是stylelint的推荐配置

stylelint-order是 css 属性排序插件

代码语言:javascript
复制
npm install stylelint-config-standard --save-dev

stylelint-order

代码语言:javascript
复制
npm install stylelint-order --save-dev
{
    "plugins": [
        "stylelint-order"
    ],
    "rules": {
        "order/order": [
            "custom-properties",
            "declarations"
        ],
        "order/properties-order": [
            "width",
            "height"
        ]
    }
}

代码检查

代码语言:javascript
复制
npx stylelint "**/*.css"

.eslintrc.js

代码语言:javascript
复制
module.exports = {
    extends: [
        'alloy',
        'plugin:prettier/recommended',
    ],
    parserOptions: {
        parser: 'babel-eslint',
        sourceType: 'module',
    },
    // parser: '@typescript-eslint/parser',
    // plugins: ['@typescript-eslint'],
    rules: {
        // "prettier/prettier": "error", 
    },
    env: {
        browser: true,
        node: true,
        jest: true,
        es2017: true,
    },
    // plugins: ['html', 'prettier'],
    plugins: ['html'],
}

.prettierrc.js

代码语言:javascript
复制
module.exports = {
    // 一行最多 80 字符
    printWidth: 80,
    // 使用 4 个空格缩进
    tabWidth: 4,
    // 不使用缩进符,而使用空格
    useTabs: false,
    // 行尾需要有分号
    semi: false,
    // 使用单引号
    singleQuote: true,
    // 对象的 key 仅在必要时用引号
    quoteProps: 'as-needed',
    // jsx 不使用单引号,而使用双引号
    jsxSingleQuote: false,
    // 末尾不需要逗号
    trailingComma: 'none',
    // 大括号内的首尾需要空格
    bracketSpacing: true,
    // jsx 标签的反尖括号需要换行
    jsxBracketSameLine: false,
    // 箭头函数,只有一个参数的时候,也需要括号
    arrowParens: 'always',
    // 每个文件格式化的范围是文件的全部内容
    rangeStart: 0,
    rangeEnd: Infinity,
    // 不需要写文件开头的 @prettier
    requirePragma: false,
    // 不需要自动在文件开头插入 @prettier
    insertPragma: false,
    // 使用默认的折行标准
    proseWrap: 'preserve',
    // 根据显示样式决定 html 要不要折行
    htmlWhitespaceSensitivity: 'css',
    // 换行符使用 lf
    endOfLine: 'lf'
};

.stylelintrc.js

代码语言:javascript
复制
module.exports = {
    extends: [
        'stylelint-config-standard',
        'stylelint-config-prettier',
        'stylelint-config-sass-guidelines',
    ],
    plugins: [
        'stylelint-order',
        'stylelint-scss'
    ],
    rules: {
        "order/order": [
            "custom-properties",
            "declarations"
        ],
        "order/properties-order": [
            "width",
            "height"
        ]
    }
};

如果不用scss,建议直接这样配置:

scss的一些规则会和常规使用的规则不太一样。

代码语言:javascript
复制
module.exports = {
    extends: ['stylelint-config-standard'],
    // "plugins": [
    //     // "stylelint-csstree-validator"
    // ],
    rules: {
        'color-named': ['never',{ignoreProperties: ['background','color']}], // never  强制使用十六进制,always-where-possible 强制使用单词命名
        // "csstree/validator": true, // 检查属性值和属性名是否正确
        'string-quotes':'double', // double 双引号,single,单引号
        // 'block-opening-brace-newline-after':'always-multi-line' // 大括号后是否另一一行
    }
}

参考链接

https://juejin.im/post/6844903621805473800

https://juejin.im/post/6844903843541549063

https://segmentfault.com/a/1190000022881634 【好文推荐】https://juejin.im/post/6844903832485363720【好文推荐】

https://github.com/AlloyTeam/eslint-config-alloy/blob/master/README.zh-CN.md

https://prettier.io/

https://eslint.org/

https://stylelint.io/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • eslint学习
    • 常见配置字段
      • 配置字段解析
        • extends:[]
        • plugins:[]
        • rules:[]
        • parserOptions:{}
      • eslint常用几个命令
        • webpack eslint配置
        • prettier学习
          • 作用
            • 安装
              • 命令
              • eslint+prettier配合配置
              • 最终配置
              • 参考链接
              相关产品与服务
              腾讯云代码分析
              腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档