美文网首页
ESLint + Typescript来规范代码

ESLint + Typescript来规范代码

作者: mamie42 | 来源:发表于2020-06-02 11:42 被阅读0次

    一、用ESLint来规范Typescript代码

    首先安装依赖:

    npm i -d eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin
    

    这三个依赖分别是:

    • eslint: ESLint的核心代码
    • @typescript-eslint/parser:ESLint的解析器,用于解析typescript,从而检查和规范Typescript代码
    • @typescript-eslint/eslint-plugin:这是一个ESLint插件,包含了各类定义好的检测Typescript代码的规范
      安装好这3个依赖包之后,在根目录下新建.eslintrc.js文件,该文件中定义了ESLint的基础配置,一个最为简单的配置如下所示:
    module.exports = {
    
        parser:  '@typescript-eslint/parser', //定义ESLint的解析器
        extends: ['plugin:@typescript-eslint/recommended'],//定义文件继承的子规范
        plugins: ['@typescript-eslint'],//定义了该eslint文件所依赖的插件
        env:{                          //指定代码的运行环境
            browser: true,
            node: true,
        }                               
    }
    
    • 在ts项目中必须执行解析器为@typescript-eslint/parser,才能正确的检测和规范TS代码
    • env环境变量配置,形如console属性只有在browser环境下才会存在,如果没有设置支持browser,那么可能报console is undefined的错误。

    二、用ESLint来规范React代码

    如果在你的TS项目中同时使用了React,那么为了检测和规范React代码的书写必须安装插件eslint-plugin-react,然后增加配置:

    module.exports = {
    
        parser:  '@typescript-eslint/parser',
        extends: [
        'plugin:react/recommended'  
        'plugin:@typescript-eslint/recommended'
        ],                              //使用推荐的React代码检测规范
        plugins: ['@typescript-eslint'],
        env:{                         
            browser: true,
            node: true,
        },
        settings: {             //自动发现React的版本,从而进行规范react代码
            "react": {
                "pragma": "React",
                "version": "detect"
            }
        }, 
        parserOptions: {        //指定ESLint可以解析JSX语法
            "ecmaVersion": 2019,
            "sourceType": 'module',
            "ecmaFeatures":{
                jsx:true
            }
        }
        rules: {
        
        }
    }
    

    在Rules中可以自定义你的React代码编码规范。

    三、结合Prettier和ESLint来规范代码

    Prettier中文的意思是漂亮的、美丽的,是一个流行的代码格式化的工具,我们来看如何结合ESLint来使用。首先我们需要安装三个依赖:

    npm i -g prettier eslint-config-prettier eslint-plugin-prettier
    

    其中:

    • prettier:prettier插件的核心代码
    • eslint-config-prettier:解决ESLint中的样式规范和prettier中样式规范的冲突,以prettier的样式规范为准,使ESLint中的样式规范自动失效
    • eslint-plugin-prettier:将prettier作为ESLint规范来使用
      然后在项目的根目录下创建.prettierrc.js文件:
    module.exports =  {
        "printWidth": 120,
        "semi": false,
        "singleQuote": true,
        "trailingComma": "all",
        "bracketSpacing": false,
        "jsxBracketSameLine": true,
        "arrowParens": "avoid",
        "insertPragma": true,
        "tabWidth": 4,
        "useTabs": false  
      };
    

    接着修改.eslintrc.js文件,引入prettier:

    module.exports = {
        parser:  '@typescript-eslint/parser',
        extends:[ 
        'prettier/@typescript-eslint',
        'plugin:prettier/recommended'
        ],
        settings: {
            "react": {
                "pragma": "React",
                "version": "detect"
            }
        },
        parserOptions: {
            "ecmaVersion": 2019,
            "sourceType": 'module',
            "ecmaFeatures":{
                jsx:true
            }
        },
        env:{
            browser: true,
            node: true,
        }  
    

    上述新增的extends的配置中:

    • prettier/@typescript-eslint:使得@typescript-eslint中的样式规范失效,遵循prettier中的样式规范
    • plugin:prettier/recommended:使用prettier中的样式规范,且如果使得ESLint会检测prettier的格式问题,同样将格式问题以error的形式抛出

    在VSCode中集成ESLint配置

    为了开发方便我们可以在VSCode中集成ESLint的配置,使得代码在保存或者代码变动的时候自动进行ESLint的fix过程。
      首先需要安装VSCode的ESLint插件,安装插件完毕后,在settings.json文件中修改其配置文件为:

    {
           "eslint.enable": true,  //是否开启vscode的eslint
           "eslint.autoFixOnSave": true, //是否在保存的时候自动fix eslint
           "eslint.options": {    //指定vscode的eslint所处理的文件的后缀
               "extensions": [
                   ".js",
                   ".vue",
                   ".ts",
                   ".tsx"
               ]
           },
           "eslint.validate": [     //确定校验准则
               "javascript",
               "javascriptreact",
               {
                   "language": "html",
                   "autoFix": true
               },
               {
                   "language": "vue",
                   "autoFix": true
               },
               {
                   "language": "typescript",
                   "autoFix": true
               },
               {
                   "language": "typescriptreact",
                   "autoFix": true
               }
           ]
    }
    

    主要注意的有两点:

    • eslint.options中可以通过configFile属性来执行eslint规范的绝对路径,默认会向上查找,在根路径中指定。
    • eslint.validate中必须通过{ language: XXX}的形式来指定typescript和typescriptreact

    参考文件地址
    https://segmentfault.com/a/1190000019661168
    https://segmentfault.com/a/1190000020713735?utm_source=tag-newest
    https://www.jianshu.com/p/fed0fbf95172

    相关文章

      网友评论

          本文标题:ESLint + Typescript来规范代码

          本文链接:https://www.haomeiwen.com/subject/wifuzhtx.html