Claude-skill-registry eslint-prettier-husky-config

This skill should be used when setting up code quality tooling with ESLint v9 flat config, Prettier formatting, Husky git hooks, lint-staged pre-commit checks, and GitHub Actions CI lint workflow. Apply when initializing linting, adding code formatting, configuring pre-commit hooks, setting up quality gates, or establishing lint CI checks for Next.js or React projects.

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/eslint-prettier-husky-config" ~/.claude/skills/majiayu000-claude-skill-registry-eslint-prettier-husky-config && rm -rf "$T"
manifest: skills/data/eslint-prettier-husky-config/SKILL.md
source content

ESLint, Prettier, Husky Configuration

Overview

Configure comprehensive code quality tooling for Next.js/React projects using ESLint v9 (flat config), Prettier, Husky git hooks, lint-staged, and CI lint checks.

Installation and Configuration Steps

1. Install Dependencies

Install required packages for ESLint v9, Prettier, and git hooks:

npm install -D eslint@^9 @eslint/js eslint-config-prettier eslint-plugin-react eslint-plugin-react-hooks eslint-plugin-jsx-a11y prettier husky lint-staged

For TypeScript projects, add:

npm install -D @typescript-eslint/parser @typescript-eslint/eslint-plugin typescript-eslint

2. Create ESLint Flat Config

Create

eslint.config.mjs
in project root using the provided template from
assets/eslint.config.mjs
. This flat config format:

  • Uses modern ESLint v9 configuration
  • Includes React, React Hooks, and JSX accessibility rules
  • Supports TypeScript with type-aware linting
  • Ignores Next.js build directories and configuration files

Customize the configuration based on project needs:

  • Adjust
    languageOptions.parserOptions
    for different ECMAScript versions
  • Modify
    rules
    to match team preferences
  • Add additional plugins as needed

3. Create Prettier Configuration

Create

.prettierrc
in project root using the template from
assets/.prettierrc
. This configuration:

  • Sets 2-space indentation
  • Uses single quotes for strings
  • Removes trailing commas
  • Sets 100-character line width
  • Uses Unix line endings

Adjust formatting rules to match team style guide.

Create

.prettierignore
using
assets/.prettierignore
to exclude:

  • Build directories (.next, dist, out)
  • Dependencies (node_modules, package-lock.json)
  • Generated files
  • Public assets

4. Set Up Husky and Lint-Staged

Initialize Husky for git hooks:

npx husky init

This creates

.husky/
directory with a
pre-commit
hook.

Replace the pre-commit hook content with:

npx lint-staged

Add lint-staged configuration to

package.json
using the example from
references/package-json-config.md
:

{
  "lint-staged": {
    "*.{js,jsx,ts,tsx}": [
      "eslint --fix",
      "prettier --write"
    ],
    "*.{json,md,yml,yaml}": [
      "prettier --write"
    ]
  }
}

This runs ESLint and Prettier on staged files before each commit.

5. Add Package Scripts

Add the following scripts to

package.json
(see
references/package-json-config.md
for complete example):

{
  "scripts": {
    "lint": "eslint . --max-warnings 0",
    "lint:fix": "eslint . --fix",
    "format": "prettier --write .",
    "format:check": "prettier --check .",
    "prepare": "husky"
  }
}

These scripts enable:

  • npm run lint
    - Check for linting errors (fails on warnings)
  • npm run lint:fix
    - Auto-fix linting issues
  • npm run format
    - Format all files with Prettier
  • npm run format:check
    - Check formatting without modifying files
  • prepare
    - Automatically set up Husky when installing dependencies

6. Create GitHub Actions Lint Workflow

Create

.github/workflows/lint.yml
using the template from
assets/github-workflows-lint.yml
. This workflow:

  • Runs on pull requests and pushes to main/master
  • Checks out code and sets up Node.js
  • Installs dependencies
  • Runs both linting and format checks
  • Fails CI if any issues are found

Customize the workflow:

  • Adjust Node.js version as needed
  • Modify branch names to match repository
  • Add caching for faster CI runs

7. Verify Setup

Test the complete setup:

  1. Lint check: Run
    npm run lint
    to verify ESLint configuration
  2. Format check: Run
    npm run format:check
    to verify Prettier configuration
  3. Pre-commit hook: Make a change and commit to test Husky and lint-staged
  4. CI workflow: Push to a branch and open a PR to verify GitHub Actions

Fix any configuration issues:

  • Review ESLint errors and adjust rules if needed
  • Format all files:
    npm run format
  • Commit the configuration changes

8. Team Documentation

Document the setup for team members (see

references/team-documentation.md
for template):

  • Explain the purpose of each tool
  • Provide setup instructions for new developers
  • Document how to temporarily bypass hooks (for emergencies only)
  • Include troubleshooting steps for common issues

Configuration Customization

ESLint Rules

Adjust rule severity in

eslint.config.mjs
:

  • "off"
    - Disable rule
  • "warn"
    - Warning (doesn't fail CI)
  • "error"
    - Error (fails CI)

Common customizations:

  • Disable specific rules:
    'react/prop-types': 'off'
  • Adjust rule options:
    'max-len': ['error', { code: 120 }]
  • Add project-specific rules

Prettier Options

Modify formatting in

.prettierrc
:

  • printWidth
    - Line length limit
  • tabWidth
    - Spaces per indentation level
  • semi
    - Semicolon preference
  • singleQuote
    - Quote style
  • trailingComma
    - Trailing comma rules

Lint-Staged Configuration

Customize pre-commit checks in

package.json
:

  • Add file type patterns
  • Include additional commands (tests, type checking)
  • Adjust which files trigger which linters

Example with type checking:

{
  "lint-staged": {
    "*.{ts,tsx}": [
      "eslint --fix",
      "prettier --write",
      "tsc-files --noEmit"
    ]
  }
}

Troubleshooting

ESLint errors on existing code: Run

npm run lint:fix
then
npm run format
to auto-fix most issues.

Husky hooks not running: Ensure

npm install
was run after Husky initialization. Check
.husky/pre-commit
is executable.

CI failing but local passes: Verify Node.js version matches between local and CI. Check that all dependencies are in

package.json
.

Conflicts between ESLint and Prettier: Ensure

eslint-config-prettier
is last in extends array to disable conflicting ESLint formatting rules.

Resources

scripts/

No executable scripts needed for this skill.

references/

  • package-json-config.md
    - Complete package.json example with all scripts and lint-staged configuration
  • team-documentation.md
    - Template for documenting the setup for team members

assets/

  • eslint.config.mjs
    - ESLint v9 flat config template with React, TypeScript, and Next.js support
  • .prettierrc
    - Prettier configuration with recommended settings
  • .prettierignore
    - Files and directories to exclude from formatting
  • github-workflows-lint.yml
    - GitHub Actions workflow for automated lint checks