0
点赞
收藏
分享

微信扫一扫

eslint入门

楚木巽 2021-09-24 阅读 68
一点点

那eslint到底有什么用呢?

看官网解释: ESLint 是在 ECMAScript/JavaScript 代码中识别和报告模式匹配的工具,它的目标是保证代码的一致性和避免错误。
首先如果团队多人的情况下,团队有一套默认的规则,那对于后期维护等会减少很多沟通成功。
然后避免错误这个也很重要。比如代码里面定义了一个变量 var test=1;
然后在一定的条件下再触发获取test.但是代码写错了。写成获取 tset。那这个时候,eslint的报错就很重要了。

开始

创建一个项目

mkdir test // 创建test 文件夹
cd test // 进入文件夹
yarn init -y // 初始化项目
yarn add -D eslint // 安装eslint
mkdir src // 创建我们需要用eslint坚持的文件夹

打开 package.json 文件,增加 scripts 属性如下:

  "scripts": {
    "lint": "eslint src --fix", // fix会根据配置规格修改部分错误
    "lint:create": "eslint --init"
  }

初始eslint。 运行命令

yarn lint:create

出现一堆选项

// 你想怎么用eslint
1、How would you like to use ESLint?
  To check syntax only  // 仅仅检查
 > To check syntax and find problems // 检查并查找错误 
  To check syntax, find problems, and enforce code style // 检查并查找错误 并且强制代码风格
// 然后问我们项目用什么模块开发
What type of modules does your project use? … 
> JavaScript modules (import/export) // es6的import/exports
  CommonJS (require/exports) // node使用的require/exports
  None of these // 不要
// 项目使用的什么框架。由于我们是test,所有选择none of  thest
Which framework does your project use? … 
 React
  Vue.js
>  None of these
// 是否使用typscript
Does your project use TypeScript? › No / Yes
// 你的代码是在客户端还是node环境运行,可以多选。都选吧
Where does your code run? …  (Press <space> to select, <a> to toggle all, <i> to invert selection)
✔ Browser
✔ Node
// 用什么方式来做配置,这里其实都差不多,我们就需要js吧
What format do you want your config file to be in? … 
❯ JavaScript
  YAML
  JSON

这时就生成了配置文件.eslintrc.js了

.eslintrc.js 文件 中我添加了两条规则以便于测试,console警告,引号必须用单引号

module.exports = {
    "env": {
        "browser": true,
        "es2021": true,
        "node": true
    },
    "extends": "eslint:recommended",
    "parserOptions": {
        "ecmaVersion": 12,
        "sourceType": "module"
    },
    "rules": {
        "no-console": 'warn', 
        "quotes": ['error', 'single']
    }
};

现在我们进入src文件创建一个a.js文件。

a.js

var a = "345";
b = 4;
console.log('sdf');

然后运行yarn lint;
这个时候控制台就提示了一个错误了

  1:5  error    'a' is assigned a value but never used  no-unused-vars
  2:1  error    'b' is not defined                      no-undef
  3:1  warning  Unexpected console statement            no-console

此时证明我们的eslint生效了。
然后a.js由于 有--fix所有双引号也改为了单引号

var a = '345';
b = 4;
console.log('sdf');

eslint可以配置的方式

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

部分配置讲解

  • Environments(env) - 指定脚本的运行环境。每种环境都有一组特定的预定义全局变量。
  • Globals - 脚本在执行期间访问的额外的全局变量。
  • Rules - 启用的规则及其各自的错误级别。(我们可以对于某些规则修改配置)这个就是我们一般需要修改的重要配置https://eslint.bootcss.com/docs/rules/建议去大概看一下这些规则
  • extends 一个配置文件可以被基础配置中的已启用的规则继承,其中eslint:recommended是默认规则。然后我们在rules里面修改规则,会扩展或者覆盖掉。

  • parserOptions - 指定你想要支持的 JavaScript 语言选项
    比如 ecmaVersion 指定 ECMAScript 版本;我们也可以改为支持的es6.目前是最新版本支持;
    sourceType - 设置为 "script" (默认) 或 "module"(如果你的代码是 ECMAScript 模块)
    ecmaFeatures- 这是个对象,表示你想使用的额外的语言特性比如 使用jsx等。

  • plugins 插件]是一个 npm 包,通常输出规则。一些插件也可以输出一个或多个命名的 配置。要确保这个包安装在 ESLint 能请求到的目录下。

JSON 格式的一个配置文件的例子:

{
    "plugins": [
        "react"
    ],
    "extends": [
        "eslint:recommended",
        "plugin:react/recommended"
    ],
    "rules": {
       "no-set-state": "off"
    }
}

项目中不使用根规则

your-project
├── .eslintrc
├── lib
│ └── source.js
└─┬ tests
  ├── .eslintrc
  └── test.js

我们运行eslint检测的test.js文件时,会找最近的 .eslintrc文件作为最高优先级,然后才是父目录里的配置文件;这时就寻找的tests文件夹下的.eslintrc规则。
为了将 ESLint 限制到一个特定的项目,在你项目根目录下的 package.json 文件eslintConfig 或者 .eslintrc.* 文件里设置 "root": true。ESLint 一旦发现配置文件中有 "root": true,它就会停止在父级目录中寻找

Glob 模式

有时候需要更精细的配置,比如,如果同一个目录下的文件需要有不同的配置,但是又不想创建多个.eslintrc.js。因此,你可以在配置中使用 overrides 键,它只适用于匹配特定的 glob 模式的文件,使用你在命令行上传递的格式 (e.g., app//.test.js)。
Glob 模式覆盖只能在配置文件 (.eslintrc.
或 package.json) 中进行配置
比如:

{
  "rules": {
    // 校验使用双引号
    "quotes": ["error", "double"]
  },
// bin文件夹下和lib文件夹下的js文件使用单引号,但是要排除以.test.js结尾的我那件
  "overrides": [
    {
      "files": ["bin/*.js", "lib/*.js"],
      "excludedFiles": "*.test.js",
      "rules": {
        "quotes": ["error", "single"]
      }
    }
  ]
}

git 提交前检查

我们使用pre-commit;
在刚才的基础上

git init; 初始化项目
yarn add -D pre-commit;

package.json 中增加pre-commit

{
  "name": "test",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "devDependencies": {
    "eslint": "^7.20.0"
  },
  "pre-commit": ["lint"], // 把eslint 加入数组中,提交前会先运行这个命令
  "scripts": {
    "lint": "eslint src --fix",
    "lint:create": "eslint --init"
  }
}

这样在我们git commit 的时候就会检查是否符合eslint了。如果不符合就会终止,修改符合之后才能提交。 或者在commit 后面添加 --no-verify

题外

如果我们的项目中有套eslint规则,但是我们vscode需要格式化就自动修复。那我们需要安装eslint插件,然后进入文件 > 首选项 > 设置- setting.json中配置

//配置eslint
  "eslint.autoFixOnSave": true, //  启用保存时自动修复,默认只支持.js文件
  "eslint.runtime": "",
  "eslint.validate": [
    "javascript",
    "javascriptreact",
    {
      "language": "vue",
      "autoFix": true
    },
    {
      "language": "html",
      "autoFix": true
    },
  ],
举报

相关推荐

0 条评论