---
# System prepended metadata

title: PID-1214

---

Configuring Husky in a monorepo using Lerna is a practical approach for managing Git hooks and code quality checks across multiple packages [1].

Here are the steps to configure Husky in a Lerna monorepo:

Prerequisites:
* Ensure you have Lerna installed globally:
    ```bash
    npm install -g lerna
    ```
Steps:
1. Initialize Lerna Monorepo:
    * Create a new directory for your monorepo or navigate to your existing monorepo project.
    * Initialize a Lerna monorepo using the following command:
        ```bash
        lerna init
        ```
    * This sets up the basic structure for your monorepo.
2. Install Husky and Lint-Staged:
    * In the root of your monorepo, install Husky and Lint-Staged as development dependencies:
        ```bash
        npm install husky lint-staged --save-dev
        ```
3. Configure Git Hooks for all packages:
    * In the root of your monorepo, use Lerna to configure Git hooks for all packages. Run the following command:
        ```bash
        lerna add husky --dev --hoist
        ```
    * This installs Husky as a development dependency for all packages in your monorepo and hoists them to the root.
4. Configure Husky Hooks for Each Package:
    * Inside each package in your monorepo, create a `.husky` directory if it doesn't exist:
        ```bash
        mkdir packages/<package-name>/.husky
        ```
    * Within the `.husky` directory of each package, create a `pre-commit` file (or any other hook you want to configure) with the desired script. For example, you can create a `pre-commit` script that runs lint-staged:
        ```bash
        # packages/<package-name>/.husky/pre-commit
        #!/bin/sh
        . "$(dirname "$0")/_/husky.sh"

        npx lint-staged
        ```
    * Make sure the script is executable:
        ```bash
        chmod +x packages/<package-name>/.husky/pre-commit
        ```
5. Configure Lint-Staged:
    * In the root of your monorepo, create a `.lintstagedrc` file to configure lint-staged for all packages. Define the linting and formatting commands based on your project's needs:
        ```json
        {
            "packages/**/*.{js,ts}": [
            "eslint --fix",
            "prettier --write"
             ]
        }
        ```
    * Adjust the lint-staged configuration to match your project's linting and formatting requirements.
6. Set Up Pre-Commit Hooks:
    * In the root of your monorepo, create a `.husky` directory (if it doesn't exist) and add a `pre-commit` script:
        ```bash
        # .husky/pre-commit
        #!/bin/sh
        . "$(dirname "$0")/_/husky.sh"

        # Run pre-commit hooks for all packages
        lerna exec --parallel -- npx --no-install husky-run pre-commit
        ```
    * Ensure the script is executable:
        ```bash
        chmod +x .husky/pre-commit
        ```
7. Link Husky Hooks to the Main `.husky` Directory:
    * In the root of your monorepo, link the Husky hooks in each package to the main `.husky` directory:
        ```bash
        lerna exec -- npx --no-install husky install .husky
        ```
8. Commit Your Changes:
    * Commit the configuration changes you've made:
        ```bash
        git add .
        git commit -m "Add Husky and lint-staged configuration"
        ```
Now, Husky is configured in your Lerna monorepo to enforce Git hooks and code quality checks for all packages. When you commit changes in any package, Husky will run lint-staged to ensure that code quality standards are met before allowing the commit to proceed.

Here are some resources that provide more detailed instructions on configuring Husky in a monorepo:

- [Linting, Formatting, and Type Checking Commits in an Nx Monorepo with Husky and lint-staged](https://www.thisdot.co/blog/linting-formatting-and-type-checking-commits-in-an-nx-monorepo-with-husky/)
- [Enforce Git Hooks in Monorepos with Husky - But How?](https://dev.to/mimafogeus2/enforce-git-hooks-in-monorepos-with-husky-but-how-3fma)
- [Smart monorepo · Issue 719 · typicode/husky](https://github.com/typicode/husky/issues/719) 