Article notes
Practical writing from the same lane as the work: architecture decisions, delivery clarity, and engineering systems.
Read the Previous Post: Building the Best Next.js TypeScript ESLint Configuration
Implementing a robust pre-commit system can significantly reduce pull request review time. By enforcing ESLint rules, ensuring passing tests, and maintaining a stable build, developers can avoid pushing broken builds and the subsequent need for corrective commits.
This approach improves code quality while reducing CI/CD expenses.
Setting Up Pre-commit and Pre-push
Start by installing the required dependencies:
npm install --save-dev husky lint-stagedyarn add --dev husky lint-stagedpnpm add --save-dev husky lint-stagedbun add --dev husky lint-stagedTo organize Husky within a config folder, modify your package.json:
{
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
"test": "vitest",
"pre-commit": "lint-staged && vitest run",
"pre-push": "eslint . --fix --max-warnings=0 && npm run build",
"prepare": "husky install config/.husky"
},
"lint-staged": {
"*.{js,jsx,ts,tsx}": [
"eslint --fix"
]
}
}This establishes commands for pre-commit and pre-push operations. Customize according to your project requirements.
Description of Actions
The pre-commit script executes linting with fixes and runs tests before allowing commits:
"pre-commit": "lint-staged && vitest run"The pre-push script enforces strict linting standards and triggers the build process:
"pre-push": "eslint . --fix --max-warnings=0 && npm run build"Execute the prepare command to generate the hook files:
npm run prepareyarn run preparepnpm run preparebun run prepareThis generates the necessary files in the config/.husky directory. These files allow Husky to execute the specified commands whenever a commit or push is made.
If you ever need to bypass Husky’s verification — for example during a work in progress — you can use --no-verify:
git commit . -m 'quick fix' --no-verifyBypassing verification risks overlooking console errors and is not recommended as a regular practice.
Conclusions
- Husky pre-commit and pre-push hooks improve code stability through enforced linting and testing protocols.
- Organizing configurations within a dedicated
configfolder maintains project cleanliness and simplifies maintenance. - Early error detection reduces corrective commits and workflow disruptions.
- While bypass options exist, circumventing verification processes compromises code reliability.
- Integrating Husky fosters quality-focused development practices and a culture of continuous improvement.
Next Post: Storybook in Action with Next.js, Tailwind and TypeScript
Building a Production Next.js App
A practical sequence for turning a fresh Next.js codebase into a product teams can lint, test, document, deploy, and secure with confidence.
- 1Part 1Atomic Module Component Structure for React
- 2Part 2Building the Best Next.js TypeScript Standard Vitest ESLint Configuration
- 3Part 3Development Workflow with Husky for Next.js, ESLint, and Vitest Integration
- 4Part 4Storybook in Action with Next.js, Tailwind and TypeScript
- 5Part 5Testing React Components with Vitest and React Testing Library
- 6Part 6Continuous Integration and Deployment for Next.js Projects
- 7Part 7Authentication and Authorization in Next.js Applications with Supabase
- 8Part 8Playwright Accessibility Checks That Teams Keep Running
Comments
Powered by GitHub Discussions — sign in with GitHub to join the conversation, orreply on GitHub.


