A Vite plugin that injects CSS into JavaScript bundles for single-file applications.
npx @tessl/cli install tessl/npm-vite-plugin-css-injected-by-js@3.5.0A Vite plugin that eliminates separate CSS files by injecting CSS directly into the JavaScript bundle, enabling single-file JavaScript applications. The plugin offers comprehensive configuration options, seamless Vite integration, and supports both development and production modes.
npm install vite-plugin-css-injected-by-jsimport cssInjectedByJsPlugin from "vite-plugin-css-injected-by-js";For TypeScript usage with type annotations:
import cssInjectedByJsPlugin from "vite-plugin-css-injected-by-js";
// Types are inferred from the function parameter
const config: Parameters<typeof cssInjectedByJsPlugin>[0] = {
styleId: "my-styles",
topExecutionPriority: false,
};
export default defineConfig({
plugins: [cssInjectedByJsPlugin(config)],
});For CommonJS:
const cssInjectedByJsPlugin = require("vite-plugin-css-injected-by-js");import { defineConfig } from "vite";
import cssInjectedByJsPlugin from "vite-plugin-css-injected-by-js";
export default defineConfig({
plugins: [
cssInjectedByJsPlugin(),
],
});Simple configuration with style ID:
export default defineConfig({
plugins: [
cssInjectedByJsPlugin({
styleId: "my-app-styles",
topExecutionPriority: false,
}),
],
});The plugin operates by intercepting CSS files during the Vite build process and converting them into JavaScript code that injects the styles at runtime. Key components:
The plugin supports two injection modes:
Core plugin function that creates Vite plugins for CSS injection.
export default function cssInjectedByJsPlugin(
config?: PluginConfiguration
): Plugin[];Experimental development server integration with hot-reload support for CSS injection.
interface DevOptions {
enableDev?: boolean;
removeStyleCode?: (id: string) => string;
removeStyleCodeFunction?: (id: string) => void;
}Advanced customization of CSS injection behavior with custom JavaScript code.
type InjectCode = (cssCode: string, options: InjectCodeOptions) => string;
type InjectCodeFunction = (cssCode: string, options: InjectCodeOptions) => void;
interface InjectCodeOptions {
styleId?: string | (() => string);
useStrictCSP?: boolean;
attributes?: { [key: string]: string };
}interface PluginConfiguration extends BaseOptions {
cssAssetsFilterFunction?: (chunk: OutputAsset) => boolean;
jsAssetsFilterFunction?: (chunk: OutputChunk) => boolean;
preRenderCSSCode?: (cssCode: string) => string;
relativeCSSInjection?: boolean;
suppressUnusedCssWarning?: boolean;
}
interface BaseOptions {
dev?: DevOptions;
injectCode?: InjectCode;
injectCodeFunction?: InjectCodeFunction;
injectionCodeFormat?: ModuleFormat;
styleId?: string | (() => string);
topExecutionPriority?: boolean;
useStrictCSP?: boolean;
}
// External types from dependencies
type Plugin = import('vite').Plugin;
type OutputAsset = import('rollup').OutputAsset;
type OutputChunk = import('rollup').OutputChunk;
type ModuleFormat = import('rollup').ModuleFormat;