Comprehensive dependency analysis tool for Node.js projects that identifies unused dependencies, missing dependencies, and provides detailed usage analysis.
npx @tessl/cli install tessl/npm-depcheck@1.4.0Depcheck is a tool for analyzing the dependencies in a project to see: how each dependency is used, which dependencies are useless, and which dependencies are missing from package.json.
npm install -g depcheck or npm install depcheckESM (ES modules):
import depcheck from 'depcheck';CommonJS:
const depcheck = require('depcheck');import depcheck from 'depcheck';
const options = {
ignoreBinPackage: false,
skipMissing: false,
ignorePatterns: ['dist', 'coverage']
};
depcheck('/path/to/project', options).then((unused) => {
console.log(unused.dependencies); // unused dependencies
console.log(unused.devDependencies); // unused devDependencies
console.log(unused.missing); // missing dependencies
});Depcheck uses a modular architecture with three main components:
function depcheck(
rootDir: string,
options: DepcheckOptions,
callback?: (result: DepcheckResults) => void
): Promise<DepcheckResults>;The primary function analyzes a project directory and returns dependency usage information.
Parameters:
rootDir: Path to the project root directory (where package.json is located)options: Configuration options for the analysiscallback: Optional callback function (if omitted, returns a Promise)Returns: Promise resolving to DepcheckResults object with:
dependencies: Array of unused dependenciesdevDependencies: Array of unused devDependenciesmissing: Object mapping missing dependencies to files that use themusing: Object mapping dependencies to files that use theminvalidFiles: Array of files that couldn't be parsedinvalidDirs: Array of directories that couldn't be accessedinterface DepcheckOptions {
ignoreBinPackage?: boolean;
skipMissing?: boolean;
ignorePatterns?: string[];
ignoreDirs?: string[];
ignoreMatches?: string[];
ignorePath?: string;
parsers?: { [pattern: string]: Parser | Parser[] };
detectors?: Detector[];
specials?: Special[];
package?: PackageJson;
}Depcheck provides access to its internal parsers, detectors, and special handlers:
// Available parsers for different file types
depcheck.parser: {
coffee: Parser;
es6: Parser;
es7: Parser;
graphql: Parser;
jsx: Parser;
sass: Parser;
storybook: Parser;
tsconfig: Parser;
typescript: Parser;
vue: Parser;
svelte: Parser;
}
// Available detectors for finding dependencies
depcheck.detector: {
exportDeclaration: Detector;
expressViewEngine: Detector;
gruntLoadTaskCallExpression: Detector;
importCallExpression: Detector;
importDeclaration: Detector;
requireCallExpression: Detector;
requireResolveCallExpression: Detector;
typescriptImportEqualsDeclaration: Detector;
}
// Special parsers for framework configurations
depcheck.special: {
babel: Special;
bin: Special;
commitizen: Special;
eslint: Special;
'feross-standard': Special;
gatsby: Special;
'gulp-load-plugins': Special;
husky: Special;
istanbul: Special;
jest: Special;
karma: Special;
'lint-staged': Special;
mocha: Special;
prettier: Special;
react17: Special;
serverless: Special;
tslint: Special;
ttypescript: Special;
webpack: Special;
}interface DepcheckResults {
dependencies: string[];
devDependencies: string[];
missing: { [dependency: string]: string[] };
using: { [dependency: string]: string[] };
invalidFiles: string[];
invalidDirs: string[];
}
interface PackageJson {
dependencies?: { [name: string]: string };
devDependencies?: { [name: string]: string };
peerDependencies?: { [name: string]: string };
optionalDependencies?: { [name: string]: string };
imports?: { [key: string]: any };
}
type Parser = (content: string, filePath: string, deps: string[], rootDir: string) => string[];
type Detector = (node: any, deps: string[]) => string[];
type Special = (filePath: string, deps: string[], rootDir: string) => Promise<string[]>;For CLI usage patterns and options, see CLI Interface.
For detailed parser configuration and custom parser setup, see Parsers.
For framework-specific configuration parsing (ESLint, Webpack, etc.), see Special Handlers.