A Vite plugin for HTML processing with template rendering, minification, and multi-page application support
npx @tessl/cli install tessl/npm-vite-plugin-html@3.2.0Vite Plugin HTML is a comprehensive Vite plugin that enhances HTML processing capabilities for modern web development workflows. It provides HTML compression using html-minifier-terser, EJS template processing with lodash.template syntax support, and multi-page application support for complex project configurations.
npm install vite-plugin-html -Dimport { createHtmlPlugin } from "vite-plugin-html";For CommonJS:
const { createHtmlPlugin } = require("vite-plugin-html");import { defineConfig } from 'vite';
import { createHtmlPlugin } from 'vite-plugin-html';
export default defineConfig({
plugins: [
createHtmlPlugin({
minify: true,
entry: 'src/main.ts',
template: 'public/index.html',
inject: {
data: {
title: 'My App',
injectScript: `<script src="./analytics.js"></script>`,
},
tags: [
{
injectTo: 'body-prepend',
tag: 'div',
attrs: {
id: 'root',
},
},
],
},
}),
],
});import { defineConfig } from 'vite';
import { createHtmlPlugin } from 'vite-plugin-html';
export default defineConfig({
plugins: [
createHtmlPlugin({
minify: true,
pages: [
{
entry: 'src/main.ts',
filename: 'index.html',
template: 'public/index.html',
injectOptions: {
data: {
title: 'Home Page',
},
},
},
{
entry: 'src/admin.ts',
filename: 'admin.html',
template: 'public/admin.html',
injectOptions: {
data: {
title: 'Admin Panel',
},
},
},
],
}),
],
});Creates the main Vite plugin for HTML processing and minification.
function createHtmlPlugin(userOptions?: UserOptions): PluginOption[];Parameters:
userOptions?: UserOptions - Configuration options for the pluginReturns:
PluginOption[] - Array containing the HTML processing plugin and minification pluginMain configuration interface for the plugin.
interface UserOptions {
/** Multi-page application configuration */
pages?: Pages;
/** HTML minification settings - boolean or detailed options */
minify?: MinifyOptions | boolean;
/** Default entry script path */
entry?: string;
/** Default template file path */
template?: string;
/** Default injection options */
inject?: InjectOptions;
/** Enable warning logs (default: false) */
verbose?: boolean;
}Configuration for HTML content injection including EJS template data and HTML tags.
interface InjectOptions {
/** Data injected into the HTML template using EJS */
data?: Record<string, any>;
/** HTML tags to inject at specified locations */
tags?: HtmlTagDescriptor[];
/** EJS template engine configuration options */
ejsOptions?: EJSOptions;
}Configuration for individual pages in multi-page applications.
interface PageOption {
/** Output HTML filename */
filename: string;
/** Template file path */
template: string;
/** Entry script path for this page */
entry?: string;
/** Injection options specific to this page */
injectOptions?: InjectOptions;
}type Entry = string | Record<string, string>;
type Pages = PageOption[];Re-exported Types:
EJSOptions - from 'ejs' package for template configurationMinifyOptions - from 'html-minifier-terser' package for compression settingsHtmlTagDescriptor - from 'vite' package for HTML tag injectionThe plugin processes HTML templates using EJS syntax with automatic environment variable injection:
<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
<title><%- title %></title>
<%- injectScript %>
</head>
<body>
<div id="app"></div>
</body>
</html>Environment variables from .env files are automatically injected into templates:
.env.${mode}.local.env.${mode}.env.local.envDefault minification settings when minify: true:
interface DefaultMinifyOptions {
collapseWhitespace: true;
keepClosingSlash: true;
removeComments: true;
removeRedundantAttributes: true;
removeScriptTypeAttributes: true;
removeStyleLinkTypeAttributes: true;
useShortDoctype: true;
minifyCSS: true;
}The plugin integrates with Vite's development server to provide:
During build, the plugin:
The plugin provides clear error messages for common issues: