如何方便的为团队所有项目统一 ESLint 配置

简介: 近期给团队项目 CLI 做重构,其中涉及到 ESLint 的部分,这部分之前的方式是通过开发和编译时调用 ESLint 的 CLI 去检查项目代码,虽然不会出什么问题,但是各种 IDE 的提示就废掉了,所以打算换一种比较通用的方式。

前言

近期给团队项目 CLI 做重构,其中涉及到 ESLint 的部分,这部分之前的方式是通过开发和编译时调用 ESLint 的 CLI 去检查项目代码,虽然不会出什么问题,但是各种 IDE 的提示就废掉了,所以打算换一种比较通用的方式。

统一配置处理

为了统一配置,配置自然是不能直接暴露给开发者的,不然很容易被各种魔改就废了,所以需要将配置包装起来。

ESLint extends

ESlint 中支持 extends 属性,用于在现有配置中扩展上一些其它的通用的配置。主要支持以下几种传值:

  • 预置的通用配置:eslint:recommended、eslint:all

实际配置文件在 eslint/conf 中可以找到

  • 配置文件地址:./path/to/shared/.eslintrc
  • 插件中提供的配置:plugin:react/recommended

可以在 eslint-plugin-react/index.js 中看到的配置详情,eslint-plugin- 的前缀可省略,/recommended 为包中抛出的 configs 的 recommended 属性

  • 配置模块包:react-app

实际配置在 eslint-config-react-app 中可以找到,eslint-config- 的前缀为可省略

通过 extends,可以方便的将统一的配置文件放置在自定义配置包中。假设我们现在定义一个通用的模块包名:@ucloud/eslint-config-console

Package eslintConfig

ESlint 配置除了可以使用配置文件,也可以在 package.json 中配置 eslintConfig 字段,较配置文件稍微简洁一点。直接如下使用上述模块包:

// package.json
{
    "name": "my-package",
    "eslintConfig": {
        "extends": "@ucloud/console"
    }
}
复制代码

依赖包

可以将 ESLint 以及相关的插件、依赖包等安装到 config 包中,保证包的统一性。

参考

最终 @ucloud/eslint-config-console 如下

package.json

{
  "name": "@ucloud/eslint-config-console",
  "version": "0.0.3",
  "description": "eslint config for console develop",
  "main": "index.js",
  "author": "zxbing0066@gmail.com",
  "dependencies": {
    "@typescript-eslint/eslint-plugin": "^2.6.1",
    "@typescript-eslint/parser": "^2.6.1",
    "babel-eslint": "^10.0.3",
    "eslint": "^6.6.0",
    "eslint-plugin-flowtype": "^4.3.0",
    "eslint-plugin-import": "^2.18.2",
    "eslint-plugin-jsx-a11y": "^6.2.3",
    "eslint-plugin-react": "^7.16.0",
    "eslint-plugin-react-hooks": "^2.2.0"
  }
}
复制代码

indexjs

module.exports = {
    root: true,
    parser: 'babel-eslint',
    plugins: ['import', 'flowtype', 'jsx-a11y', 'react', 'react-hooks'],
    env: {
        browser: true,
        commonjs: true,
        es6: true,
        jest: true,
        node: true
    },
    parserOptions: {
        ecmaVersion: 2018,
        sourceType: 'module',
        ecmaFeatures: {
            jsx: true
        }
    },
    extends: ['eslint:recommended', 'plugin:react/recommended'],
    overrides: [
        {
            files: ['**/*.ts?(x)'],
            parser: '@typescript-eslint/parser',
            parserOptions: {
                ecmaVersion: 2018,
                sourceType: 'module',
                ecmaFeatures: {
                    jsx: true
                },
                warnOnUnsupportedTypeScriptVersion: true
            },
            plugins: ['@typescript-eslint'],
            extends: ['eslint:recommended', 'plugin:react/recommended', 'plugin:@typescript-eslint/recommended']
        }
    ],
    settings: {
        react: {
            version: 'detect'
        }
    }
};
复制代码

项目中使用

{
  "name": "my-project",
  "eslintConfig": {
    "extends": "@ucloud/console"
  }
}
复制代码

保证配置不被篡改

通过 extends 可以方便统一配置,但是配置在各项目中依旧容易被篡改,这个时候需要做一些防范措施。

CLI

如果有统一的开发用 CLI,可以在 CLI 中做好校验。

commit hook

通过 commit hook 在项目 commit 时校验项目的 eslint 配置是否被篡改,不过依然可以绕过。

CI/CD

可在 CI/CD 阶段做校验,配置篡改后直接报错。

发布系统发布时做校验

在最终发布时做好校验。

后续升级

前端技术发展迅猛,也需要考虑到后续升级的问题。

  • 尽量保持配置一致性
  • 可切割版本,老项目不做升级,新项目直接使用新版
  • 通过 AST,将规则差异处做转换

总结

通过 ESLint extends 可以很好的统一团队的配置,并且不会影响 IDE 的 lint 提示。

借助 CI/CD 等工具做好检验工作,可以有效防止统一配置被篡改。

相关文章
|
9月前
|
缓存 前端开发 JavaScript
Vite 构建流程大揭秘:快速构建前端项目的秘密武器
Vite 构建流程大揭秘:快速构建前端项目的秘密武器
|
4月前
|
设计模式 监控 JavaScript
TypeScript 在大型项目内网管理监控软件中的结构优化
本文探讨了 TypeScript 在大型项目内网管理监控软件中的结构优化,包括模块划分与组织、接口与抽象类的使用以及依赖注入与控制反转的设计模式,通过具体代码示例展示了这些技术的应用,提高了代码的可读性、可维护性和灵活性。
69 3
|
5月前
|
前端开发 JavaScript 开发工具
前端项目增加eslint全过程
如何在前端项目中安装并配置ESLint和Prettier,包括VSCode插件的安装、npm包的全局安装、.eslintrc.js配置文件的生成以及编辑器设置的调整。
76 6
|
6月前
|
机器学习/深度学习 数据可视化 数据挖掘
构建可复用的 Jupyter 模板和插件:提高工作效率的最佳实践
【8月更文第29天】Jupyter Notebook 是一个广泛使用的交互式计算环境,支持多种编程语言。它不仅用于数据分析、可视化和机器学习项目,也是教学和科研的理想工具。然而,随着使用频率的增加,重复编写相似的代码和设置变得既耗时又低效。通过创建可复用的 Jupyter 模板和插件,我们可以显著提高工作效率。
151 1
|
9月前
|
开发者
Eslint插件使用配置, 规范化开发, 详细配置流程
Eslint插件使用配置, 规范化开发, 详细配置流程
|
7月前
|
JavaScript API
TypeScript 项目中接口的统一管理
TypeScript 项目中接口的统一管理
86 0
|
9月前
项目管理工具计划模板解析:项目管理工具的双重功能与创建方法
本文介绍了项目计划模板的含义和重要性。项目计划模板是用于规划项目结构的可编辑文档,帮助团队明确任务、分配责任和管理时间。模板有助于跟踪项目进度、避免任务冲突,并简化会议安排。创建模板通常涉及选择合适的项目管理工具,如Zoho Projects或Microsoft Excel,然后分解任务、定义日期并持续调整。在Zoho Projects中,用户可以按步骤创建模板,包括命名、添加任务和设置相关细节。
89 0
|
JavaScript 开发者
TypeScript 对大型项目的管理和维护非常有利。具体应用案例解析
TypeScript 对大型项目的管理和维护非常有利。具体应用案例解析
123 0
|
存储 缓存 资源调度
Monorepo,大型前端项目管理模式实践
阅读本文您将了解到:什么是 monorepo、为什么要 monorepo、如何实践 monorepo。
7083 50
Monorepo,大型前端项目管理模式实践
|
前端开发 JavaScript 搜索推荐
带你入门前端工程(二):统一规范(一)
带你入门前端工程(二):统一规范
171 0