A Vite plugin for treeshaking Vuetify components and more
npx @tessl/cli install tessl/npm-vite-plugin-vuetify@2.1.0Vite Plugin Vuetify is a Vite plugin that provides tree-shaking optimization for Vuetify 3 components and automatic import functionality. It enables automatic imports of Vuetify components and directives while providing flexible style customization options including SASS variable overrides and conditional style imports.
npm install vite-plugin-vuetifyimport vuetify, { transformAssetUrls } from "vite-plugin-vuetify";For CommonJS:
const vuetify = require("vite-plugin-vuetify").default;
const { transformAssetUrls } = require("vite-plugin-vuetify");// vite.config.js
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import vuetify, { transformAssetUrls } from "vite-plugin-vuetify";
export default defineConfig({
plugins: [
vue({
template: { transformAssetUrls }
}),
vuetify({
autoImport: true,
styles: true
})
]
});// plugins/vuetify.js
import "vuetify/styles";
import { createVuetify } from "vuetify";
export default createVuetify();Creates a Vite plugin configuration for Vuetify optimization.
/**
* Creates Vite plugins for Vuetify component optimization and style processing
* @param options - Configuration options for the plugin
* @returns Array of Vite Plugin instances
*/
declare function vuetify(options?: Options): Plugin[];Usage Examples:
// Basic usage with default options
vuetify()
// Enable labs components and ignore specific components
vuetify({
autoImport: {
labs: true,
ignore: ["VAlert", "Ripple"]
}
})
// Custom SASS configuration
vuetify({
styles: {
configFile: "src/settings.scss"
}
})
// Disable all style imports
vuetify({ styles: "none" })
// Use SASS source files instead of CSS
vuetify({ styles: "sass" })Provides configuration for transforming asset URLs in Vuetify component templates.
/**
* Configuration object for transforming asset URLs in Vuetify components
* Used with @vitejs/plugin-vue for proper asset handling
*/
declare const transformAssetUrls: Record<string, string[]>;Static Property:
/**
* Static property on the main vuetify function providing asset URL transformation config
*/
declare namespace vuetify {
const transformAssetUrls: Record<string, string[]>;
}Usage Examples:
// With @vitejs/plugin-vue
import vue from "@vitejs/plugin-vue";
import vuetify, { transformAssetUrls } from "vite-plugin-vuetify";
export default defineConfig({
plugins: [
vue({
template: { transformAssetUrls }
}),
vuetify()
]
});
// Using static property
vue({
template: { transformAssetUrls: vuetify.transformAssetUrls }
})Main configuration interface for the Vuetify plugin.
interface Options {
/** Controls automatic import behavior for Vuetify components and directives */
autoImport?: ImportPluginOptions;
/** Controls style loading and processing behavior */
styles?: StylesOptions;
}Configuration for automatic import functionality.
/** Configuration for auto-import functionality */
type ImportPluginOptions = boolean | ObjectImportPluginOptions;
interface ObjectImportPluginOptions {
/** Include Vuetify Labs components in auto-imports */
labs?: boolean;
/** Array of component or directive names to ignore during auto-import */
ignore?: (keyof typeof Components | keyof typeof Directives)[];
}Configuration for style loading and processing.
/** Style loading configuration */
type StylesOptions =
| true // Load default CSS styles
| "none" // Disable all style imports
| "sass" // Use SASS source files instead of CSS
| StylesConfigObject; // Custom SASS configuration
interface StylesConfigObject {
/** Path to SASS configuration file for variable overrides */
configFile: string;
}The vuetify function returns an array containing up to two Vite plugins:
vuetify:import) - Handles automatic component and directive importsvuetify:styles) - Processes style imports and SASS configurationImport Plugin Features:
Styles Plugin Features:
The plugin will throw errors in the following cases:
The plugin provides full TypeScript support with:
The transformAssetUrls configuration includes mappings for Vuetify components that use image assets:
['image']['image']['image', 'prependAvatar', 'appendAvatar']['src', 'lazySrc', 'srcset']['src', 'lazySrc', 'srcset']This ensures proper asset URL resolution for both kebab-case and PascalCase component names.