293 lines
7.9 KiB
TypeScript
293 lines
7.9 KiB
TypeScript
|
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);
|
||
|
|
||
|
userOptions: HtmlWebpackPlugin.Options;
|
||
|
|
||
|
/** Current HtmlWebpackPlugin Major */
|
||
|
version: number;
|
||
|
|
||
|
/**
|
||
|
* Options after html-webpack-plugin has been initialized with defaults
|
||
|
*/
|
||
|
options?: HtmlWebpackPlugin.ProcessedOptions;
|
||
|
|
||
|
apply(compiler: Compiler): void;
|
||
|
|
||
|
static getHooks(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 {
|
||
|
/**
|
||
|
* 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"
|
||
|
// `none` is deprecated and an alias for `auto` now.
|
||
|
| "none"
|
||
|
| "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`
|
||
|
* [name] will be replaced by the entry name
|
||
|
* Supports a function to generate the name
|
||
|
*
|
||
|
* @default 'index.html'
|
||
|
*/
|
||
|
filename?: string | ((entryName: string) => 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 <script src="..."></script>
|
||
|
* defer will result in <script defer src="..."></script>
|
||
|
*
|
||
|
* @default 'defer'
|
||
|
*/
|
||
|
scriptLoading?: "blocking" | "defer" | "module" | "systemjs-module";
|
||
|
/**
|
||
|
* 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<string>)
|
||
|
| Promise<string>;
|
||
|
/**
|
||
|
* Allows to overwrite the parameters used in the template
|
||
|
*/
|
||
|
templateParameters?:
|
||
|
| false // Pass an empty object to the template function
|
||
|
| ((
|
||
|
compilation: Compilation,
|
||
|
assets: {
|
||
|
publicPath: string;
|
||
|
js: Array<string>;
|
||
|
css: Array<string>;
|
||
|
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. <link />
|
||
|
*/
|
||
|
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 plugin options after adding default values
|
||
|
*/
|
||
|
interface ProcessedOptions extends Required<Options> {
|
||
|
filename: string;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* The values which are available during template execution
|
||
|
*
|
||
|
* Please keep in mind that the `templateParameter` options allows to change them
|
||
|
*/
|
||
|
interface TemplateParameter {
|
||
|
compilation: Compilation;
|
||
|
htmlWebpackPlugin: {
|
||
|
tags: {
|
||
|
headTags: HtmlTagObject[];
|
||
|
bodyTags: HtmlTagObject[];
|
||
|
};
|
||
|
files: {
|
||
|
publicPath: string;
|
||
|
js: Array<string>;
|
||
|
css: Array<string>;
|
||
|
manifest?: string;
|
||
|
favicon?: string;
|
||
|
};
|
||
|
options: Options;
|
||
|
};
|
||
|
webpackConfig: any;
|
||
|
}
|
||
|
|
||
|
interface Hooks {
|
||
|
alterAssetTags: AsyncSeriesWaterfallHook<{
|
||
|
assetTags: {
|
||
|
scripts: HtmlTagObject[];
|
||
|
styles: HtmlTagObject[];
|
||
|
meta: HtmlTagObject[];
|
||
|
};
|
||
|
publicPath: string,
|
||
|
outputName: string;
|
||
|
plugin: HtmlWebpackPlugin;
|
||
|
}>;
|
||
|
|
||
|
alterAssetTagGroups: AsyncSeriesWaterfallHook<{
|
||
|
headTags: HtmlTagObject[];
|
||
|
bodyTags: HtmlTagObject[];
|
||
|
outputName: string;
|
||
|
publicPath: string,
|
||
|
plugin: HtmlWebpackPlugin;
|
||
|
}>;
|
||
|
|
||
|
afterTemplateExecution: AsyncSeriesWaterfallHook<{
|
||
|
html: string;
|
||
|
headTags: HtmlTagObject[];
|
||
|
bodyTags: HtmlTagObject[];
|
||
|
outputName: string;
|
||
|
plugin: HtmlWebpackPlugin;
|
||
|
}>;
|
||
|
|
||
|
beforeAssetTagGeneration: AsyncSeriesWaterfallHook<{
|
||
|
assets: {
|
||
|
publicPath: string;
|
||
|
js: Array<string>;
|
||
|
css: Array<string>;
|
||
|
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 | null | undefined;
|
||
|
};
|
||
|
/**
|
||
|
* 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;
|
||
|
/**
|
||
|
* Meta information about the tag
|
||
|
* E.g. `{'plugin': 'html-webpack-plugin'}`
|
||
|
*/
|
||
|
meta: {
|
||
|
plugin?: string,
|
||
|
[metaAttributeName: string]: any;
|
||
|
};
|
||
|
}
|
||
|
}
|