Skip to content

Resolving "Cannot find module 'ajv/dist/compile/codegen'" Error

Problem Statement

The error "Cannot find module 'ajv/dist/compile/codegen'" typically occurs when working with JavaScript build tools like Webpack, particularly when using frameworks such as Quasar, React, or Vue.js. This is a dependency resolution issue where the AJV (Another JSON Schema Validator) library and its related packages have incompatible versions.

The error message indicates that a required module path within the AJV package cannot be located, usually because:

  • There are conflicting versions of AJV dependencies in your project
  • The installed AJV version doesn't match what other packages expect
  • Your package-lock.json has constraints that prevent proper dependency resolution

Solution Overview

The root cause is typically version mismatches between ajv and ajv-keywords (or other AJV-dependent packages). Here are the most effective solutions, ordered by effectiveness:

The most reliable fix is to ensure you have compatible versions of AJV and its related packages:

bash
npm install ajv@latest ajv-keywords@latest

Or for specific version requirements:

bash
npm install --save-dev ajv@^8

Method 2: Clear Dependency Cache and Reinstall

If version issues persist, try a clean reinstall:

bash
npm cache clean -f
rm -rf package-lock.json node_modules
npm install

If you encounter peer dependency issues:

bash
npm install --legacy-peer-deps

Method 3: Check Existing Dependencies

First, analyze your dependency tree to understand which packages require AJV:

bash
npm ls ajv

This command will show you which versions of AJV your dependencies require, helping you choose the appropriate version to install.

Detailed Explanations

Understanding the Dependency Conflict

The error occurs because:

  1. ajv-keywords (or similar packages) depends on a specific AJV API structure
  2. Your project has a different AJV version than expected
  3. The file path ajv/dist/compile/codegen exists in AJV version 7+ but not in older versions

Version Compatibility Guide

Based on community reports:

  • AJV 6.x: Use with older Node.js versions (8, 12)
  • AJV 7.x: Compatible with most modern setups
  • AJV 8.x: Latest version, may require updates to dependent packages

WARNING

If you're working with legacy projects, you may need to downgrade both AJV and its plugins to compatible versions:

bash
npm install ajv@6.12.6 ajv-keywords@3.0.0

Prevention Tips

To avoid similar issues in the future:

  1. Regularly update dependencies: Keep AJV and related packages updated
  2. Check compatibility: Review dependency requirements when adding new packages
  3. Use consistent environments: Ensure all developers use similar Node.js and npm versions
  4. Monitor dependency tree: Periodically run npm ls ajv to check for conflicts

Troubleshooting

If the error persists after trying these solutions:

  1. Check if you have a .npmrc file with legacy-peer-deps=true - this can sometimes cause issues
  2. Verify your Node.js version meets the requirements of your dependencies
  3. Consider using npm audit to identify security issues that might be affecting dependencies

INFO

This error is particularly common in projects using:

  • Create React App
  • Webpack dev server
  • JHipster projects
  • Quasar framework

By following these steps, you should be able to resolve the AJV module resolution error and continue with your development work.