vite-plugin-circular-dependency
v0.5.0
Published
Detect circular dependencies
Downloads
76,962
Maintainers
Readme
vite-plugin-circular-dependency
English | 中文
A framework-agnostic build-time Vite plugin designed to detect circular imports and self-references, compatible with dynamic and static imports.
DEMO
// Configure the output path,
// a scan report will be generated to the specified path
export default defineConfig({
plugins: [
circleDependency({
outputFilePath: "./circleDep",
}),
],
});
// Without any configuration, it will be printed on the console
export default defineConfig({
plugins: [circleDependency()],
});
Installation
npm i -D vite-plugin-circular-dependency
// yarn add --dev vite-plugin-circular-dependency
// pnpm i --dev vite-plugin-circular-dependency
Usage
Please use this plugin when building
In your vite.config.(js|ts)
import the plugin and register it.
import { defineConfig } from "vite";
import circleDependency from "vite-plugin-circular-dependency";
export default defineConfig({
plugins: [circleDependency()],
});
Options
export interface Options {
/**
* Rules to include transforming target.
*
* @default [/\.[jt]sx?$/, /\.vue\??/]
*/
include?: FilterPattern;
/**
* Rules to exclude scan target.
*
* @default [/node_modules/, /\.git/]
*/
exclude?: FilterPattern;
/**
* The file address of the scan result output, the default console print
*/
outputFilePath?: string;
// If configured, will output the products of circular references as an interactive HTML application to the specified address
outputInteractiveFilePath?: string;
/**
* Whether to throw an error when a circular import exists
*
* @default true
*/
circleImportThrowErr?: boolean;
/**
* Format the path of the output node.
* By default, vite.config will be used as the root path to generate a relative path
*
* @default function
*/
formatOutModulePath?: (path: string) => string;
/**
* The result of formatted output
* will also affect the data format in the console print or output file
*
* @default (data: CircleData) => data
*/
formatOut?: (data: CircleData) => any;
/**
* Whether to ignore dynamic imports during the scan.
*
* @default false
*
* If the file has the @circular-ignore tag, the module will also be ignored for circular dependency scanning.
* Example:
* // @circular-ignore
* import { example } from './exampleModule';
*/
ignoreDynamicImport?: boolean;
}