A vite plugin for Vue DevTools that enhances Vue developer experience with debugging and inspection capabilities
—
Module dependency tracking and analysis for Vue/JS/TS files with real-time updates during development. This functionality enables the DevTools to visualize and analyze the module dependency graph of your application.
Analyzes the project's module dependency graph and returns information about Vue, JavaScript, and TypeScript modules with their dependencies.
/**
* Gets module dependency graph for Vue/JS/TS files
* @returns Promise resolving to array of module information with dependencies
*/
function getGraphModules(): Promise<ModuleInfo[]>;
interface ModuleInfo {
/** Module identifier (file path) */
id: string;
/** Array of module IDs that this module depends on */
deps: string[];
}Usage Examples:
// Get complete module graph
const modules = await getGraphModules();
// Example result:
[
{
id: "/src/main.ts",
deps: ["/src/App.vue", "/src/router/index.ts"]
},
{
id: "/src/App.vue",
deps: ["/src/components/Header.vue", "/src/stores/user.ts"]
},
{
id: "/src/components/Header.vue",
deps: []
}
]The module graph analysis focuses on development-relevant files by filtering modules based on specific criteria:
Only modules matching these patterns are included in the dependency graph:
.vue - Single File Components.js - JavaScript modules.ts - TypeScript modules.jsx - React-style JSX files.tsx - TypeScript JSX files.html - HTML entry points.json - Configuration and data filesFiles are included if they match: /\.(vue|js|ts|jsx|tsx|html|json)($|\?v=)/
This pattern captures:
file.js?v=abc123)The module graph analysis uses a recursive dependency search algorithm:
/**
* Recursively searches for Vue/JS/TS dependencies
* @param id - Module ID to search dependencies for
* @param seen - Set of already processed modules (prevents circular references)
* @returns Array of filtered dependency IDs
*/
function searchForVueDeps(id: string, seen?: Set<string>): string[];seen set to avoid infinite loopsExample Dependency Resolution:
main.ts
├── App.vue (direct)
├── router/index.ts (direct)
│ └── views/Home.vue (transitive via router)
└── node_modules/vue (excluded - not Vue/JS/TS file)Result: ["App.vue", "router/index.ts", "views/Home.vue"]
The module graph is automatically updated during development:
// Debounced update function (100ms delay)
const debouncedModuleUpdated = debounce(() => {
getViteRpcServer<ViteRPCFunctions>?.()?.broadcast?.emit('graphModuleUpdated')
}, 100);The plugin integrates with Vite's middleware system to detect changes:
server.middlewares.use((_, __, next) => {
debouncedModuleUpdated()
next()
})The module graph functionality leverages Vite's plugin inspection API:
// Gets Vite instance metadata
const meta = await rpc.getMetadata();
// Retrieves modules list from Vite environment
const modules = await rpc.getModulesList({
vite: meta?.instances[0].vite,
env: meta?.instances[0].environments[0],
});Install with Tessl CLI
npx tessl i tessl/npm-vite-plugin-vue-devtools