Files
test-repo/docs/precommit.md
T

2.1 KiB

id, title
id title
precommit Pre-commit Hook

You can use Prettier with a pre-commit tool. This can re-format your files that are marked as "staged" via git add before you commit.

Option 1. lint-staged

Install it along with husky:

yarn add lint-staged husky --dev

and add this config to your package.json:

{
  "scripts": {
    "precommit": "lint-staged"
  },
  "lint-staged": {
    "*.{js,json,css,md}": ["prettier --write", "git add"]
  }
}

Warning: Currently there is a limitation where if you stage specific lines this approach will stage the whole file after formatting. See this issue for more info.

See https://github.com/okonet/lint-staged#configuration for more details about how you can configure lint-staged.

Option 2. pre-commit (JS version)

Install the package:

yarn add pre-commit --dev

and add this config to your package.json:

{
  "scripts": {
    "prettier": "prettier */**/*.js --ignore-path ./.prettierignore --write && git add . && git status"
  },
  "pre-commit": [
    "prettier"
  ]
}

Find more info from here.

Option 3. pre-commit (Python version)

Copy the following config into your .pre-commit-config.yaml file:

    -   repo: https://github.com/prettier/prettier
        sha: ''  # Use the sha or tag you want to point at
        hooks:
        -   id: prettier

Find more info from here.

Option 4. bash script

Alternately you can save this script as .git/hooks/pre-commit and give it execute permission:

#!/bin/sh
jsfiles=$(git diff --cached --name-only --diff-filter=ACM "*.js" "*.jsx" | tr '\n' ' ')
[ -z "$jsfiles" ] && exit 0

# Prettify all staged .js files
echo "$jsfiles" | xargs ./node_modules/.bin/prettier --write

# Add back the modified/prettified files to staging
echo "$jsfiles" | xargs git add

exit 0