Publish your @YourNameEslintRecommend Rules.

Updated:更新于: at 10:28

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 前置校验检查,提高代码质量,减少低级错误。

参考