vite-plugin-unused-files
v0.1.6
Published
A Vite plugin to find and optionally delete unused files in your project.
Maintainers
Readme
vite-plugin-unused-files
A Vite plugin to find and optionally remove unused files in your project.
Features
- 🔍 Deep Analysis: Uses AST parsing (Babel, Vue Compiler, PostCSS) for accurate dependency detection.
- 🎯 Broad Support:
- JavaScript/TypeScript (
.js,.ts,.jsx,.tsx) - Vue Single File Components (
.vue) - CSS/SCSS/Less (
.css,.scss,.less) - Static assets (images, fonts, etc.)
- JavaScript/TypeScript (
- 🚀 Advanced Detection:
- ES Modules (
import/export) - CommonJS (
require) - Dynamic imports (
import()) - React.lazy & Vue async components
- CSS
@importandurl() - JSX/Template asset references (
src,href)
- ES Modules (
- 🛡️ Safe: Defaults to
dryRun: trueto prevent accidental deletion.
Installation
npm install vite-plugin-unused-files --save-dev
# or
yarn add vite-plugin-unused-files -D
# or
pnpm add vite-plugin-unused-files -DUsage
// vite.config.js
import findUnusedFiles from "vite-plugin-unused-files";
export default {
plugins: [
findUnusedFiles({
// options
}),
],
};Configuration
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| include | string[] | ['src/**/*'] | Glob patterns for files to analyze. |
| exclude | string[] | ['src/**/*.d.ts'] | Glob patterns for files to ignore. |
| alias | object | { '@': 'src' } | Path aliases mapping. |
| root | string | process.cwd() | Project root directory. |
| dryRun | boolean | true | If true, logs unused files without deleting them. |
| failOnUnused | boolean | false | If true, throws an error when unused files are found (useful for CI). |
findUnusedFiles({
include: ['src/**/*'],
exclude: ['src/**/*.test.ts', 'src/**/*.d.ts'],
alias: {
'@': 'src',
'~': 'src/assets'
},
dryRun: true, // Set to false to actually delete files
})How It Works
The plugin builds a complete dependency graph of your project:
- Scan: Finds all files matching your
includepatterns. - Parse: Uses specialized parsers for each file type to extract imports:
- JS/TS: Uses
@babel/parserto findimport,require, and dynamicimport(). - Vue: Uses
@vue/compiler-sfcto parse<script>,<template>, and<style>. - Styles: Uses
postcssto find@importandurl()references.
- JS/TS: Uses
- Resolve: Resolves all import paths to absolute file paths, handling aliases and extensions.
- Compare: Identifies files that exist in the scan but are never referenced in the dependency graph.
Development
This project uses Vitest for unit testing.
# Install dependencies
npm install
# Run tests
npm test
# Run manual integration test
node test/manual-test.mjsLicense
MIT
