import { AsyncSeriesWaterfallHook } from "tapable"; import { Compiler, compilation } from 'webpack'; import { Options as HtmlMinifierOptions } from "html-minifier-terser"; export = HtmlWebpackPlugin; declare class HtmlWebpackPlugin { constructor(options?: HtmlWebpackPlugin.Options); apply(compiler: Compiler): void; static getHooks(compilation: compilation.Compilation): HtmlWebpackPlugin.Hooks; /** * Static helper to create a tag object to be get injected into the dom */ static createHtmlTagObject( tagName: string, attributes?: { [attributeName: string]: string | boolean }, innerHTML?: string ): HtmlWebpackPlugin.HtmlTagObject; static readonly version: number; } declare namespace HtmlWebpackPlugin { type MinifyOptions = HtmlMinifierOptions; interface Options extends Partial {} /** * The plugin options after adding default values */ interface ProcessedOptions { /** * Emit the file only if it was changed. * @default true */ cache: boolean; /** * List all entries which should be injected */ chunks: "all" | string[]; /** * Allows to control how chunks should be sorted before they are included to the html. * @default 'auto' */ chunksSortMode: | "auto" | "manual" | (((entryNameA: string, entryNameB: string) => number)); /** * List all entries which should not be injected */ excludeChunks: string[]; /** * Path to the favicon icon */ favicon: false | string; /** * The file to write the HTML to. * Supports subdirectories eg: `assets/admin.html` * @default 'index.html' */ filename: string; /** * By default the public path is set to `auto` - that way the html-webpack-plugin will try * to set the publicPath according to the current filename and the webpack publicPath setting */ publicPath: string | 'auto'; /** * If `true` then append a unique `webpack` compilation hash to all included scripts and CSS files. * This is useful for cache busting */ hash: boolean; /** * Inject all assets into the given `template` or `templateContent`. */ inject: | false // Don't inject scripts | true // Inject scripts into body | "body" // Inject scripts into body | "head" // Inject scripts into head /** * Set up script loading * blocking will result in * defer will result in * * @default 'blocking' */ scriptLoading: | "blocking" | "defer" /** * Inject meta tags */ meta: | false // Disable injection | { [name: string]: | string | false // name content pair e.g. {viewport: 'width=device-width, initial-scale=1, shrink-to-fit=no'}` | { [attributeName: string]: string | boolean }; // custom properties e.g. { name:"viewport" content:"width=500, initial-scale=1" } }; /** * HTML Minification options accepts the following values: * - Set to `false` to disable minifcation * - Set to `'auto'` to enable minifcation only for production mode * - Set to custom minification according to * {@link https://github.com/kangax/html-minifier#options-quick-reference} */ minify: 'auto' | boolean | MinifyOptions; /** * Render errors into the HTML page */ showErrors: boolean; /** * The `webpack` require path to the template. * @see https://github.com/jantimon/html-webpack-plugin/blob/master/docs/template-option.md */ template: string; /** * Allow to use a html string instead of reading from a file */ templateContent: | false // Use the template option instead to load a file | string | ((templateParameters: { [option: string]: any }) => (string | Promise)) | Promise; /** * Allows to overwrite the parameters used in the template */ templateParameters: | false // Pass an empty object to the template function | (( compilation: any, assets: { publicPath: string; js: Array; css: Array; manifest?: string; favicon?: string; }, assetTags: { headTags: HtmlTagObject[]; bodyTags: HtmlTagObject[]; }, options: ProcessedOptions ) => { [option: string]: any } | Promise<{ [option: string]: any }>) | { [option: string]: any }; /** * The title to use for the generated HTML document */ title: string; /** * Enforce self closing tags e.g. */ xhtml: boolean; /** * In addition to the options actually used by this plugin, you can use this hash to pass arbitrary data through * to your template. */ [option: string]: any; } /** * The values which are available during template execution * * Please keep in mind that the `templateParameter` options allows to change them */ interface TemplateParameter { compilation: any; htmlWebpackPlugin: { tags: { headTags: HtmlTagObject[]; bodyTags: HtmlTagObject[]; }; files: { publicPath: string; js: Array; css: Array; manifest?: string; favicon?: string; }; options: Options; }; webpackConfig: any; } interface Hooks { alterAssetTags: AsyncSeriesWaterfallHook<{ assetTags: { scripts: HtmlTagObject[]; styles: HtmlTagObject[]; meta: HtmlTagObject[]; }; outputName: string; plugin: HtmlWebpackPlugin; }>; alterAssetTagGroups: AsyncSeriesWaterfallHook<{ headTags: HtmlTagObject[]; bodyTags: HtmlTagObject[]; outputName: string; plugin: HtmlWebpackPlugin; }>; afterTemplateExecution: AsyncSeriesWaterfallHook<{ html: string; headTags: HtmlTagObject[]; bodyTags: HtmlTagObject[]; outputName: string; plugin: HtmlWebpackPlugin; }>; beforeAssetTagGeneration: AsyncSeriesWaterfallHook<{ assets: { publicPath: string; js: Array; css: Array; favicon?: string; manifest?: string; }; outputName: string; plugin: HtmlWebpackPlugin; }>; beforeEmit: AsyncSeriesWaterfallHook<{ html: string; outputName: string; plugin: HtmlWebpackPlugin; }>; afterEmit: AsyncSeriesWaterfallHook<{ outputName: string; plugin: HtmlWebpackPlugin; }>; } /** * A tag element according to the htmlWebpackPlugin object notation */ interface HtmlTagObject { /** * Attributes of the html tag * E.g. `{'disabled': true, 'value': 'demo'}` */ attributes: { [attributeName: string]: string | boolean; }; /** * The tag name e.g. `'div'` */ tagName: string; /** * The inner HTML */ innerHTML?: string; /** * Whether this html must not contain innerHTML * @see https://www.w3.org/TR/html5/syntax.html#void-elements */ voidTag: boolean; } }