Skip to content

Publish your @YourNameEslintRecommend Rules.

Updated: at 10:28 AM

Background

Lately, I must build a common Eslint module for my job project and then upgrade our code to be standardized. It can get some advantages for us:

  1. Uniform code style.
  2. Avoid low-level syntax wrong.
  3. Avoid the developer using plain text instead of i18n keys in the project.

预期

将多个项目的 eslint 规则统一抽象到一个 package 中进行维护,然后子项目只需要通过对这个 package 安装后进行使用即可。同时支持 prettier + commit hook 前置校验检查。 选型:

代码结构

- packages
	- Other projects...
		- eslintrc.cjs
	- eslint
		- lib
			- index.js
		- package.json

实现

1. 创建 eslint package

pnpm create @your-name/eslint

2. 安装 eslint 相关依赖

pnpm i eslint @typescript-eslint/eslint-plugin @typescript-eslint/parser eslint-plugin-react-hooks eslint-plugin-react-refresh

3. 配置 eslint

pnpm i -D eslint-config-prettier eslint-plugin-prettier

.eslintrc.cjs

module.exports = {
  root: true,
  parser: '@typescript-eslint/parser',
  parserOptions: {
    ecmaVersion: 2020,
    sourceType: 'module',
    ecmaFeatures: {
      jsx: true,
    },
  },
  extends: [
    'plugin:@typescript-eslint/recommended',
    'plugin:react/recommended',
    'plugin:react-hooks/recommended',
    'plugin:react-refresh/recommended',
    'prettier',
  ],
  rules: {
    'prettier/prettier': 'error',
  },
  settings: {
    react: {
      version: 'detect',
    },
  },
  plugins: ['@typescript-eslint', 'react', 'react-hooks', 'react-refresh', 'prettier'],
};

4. 配置 prettier

pnpm i -D prettier

.prettierrc.cjs

module.exports = {
  singleQuote: true,
  semi: false,
  trailingComma: 'all',
  arrowParens: 'always',
};

5. 配置 husky

pnpm i -D husky lint-staged

package.json

{
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "*.{js,jsx,ts,tsx}": [
      "eslint --fix",
      "prettier --write"
    ]
  }
}

6. 发布

pnpm publish

7. 子项目使用

pnpm i @your-name/eslint

.eslintrc.cjs

module.exports = {
  extends: '@your-name/eslint',
};

总结

通过抽象 eslint 规则到一个 package 中,可以实现多个项目的统一维护,同时支持 prettier + commit hook 前置校验检查,提高代码质量,减少低级错误。

参考