Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Simplifies creation of HTML files to serve your webpack bundles

License

NotificationsYou must be signed in to change notification settings

acidburn0zzz/html-webpack-plugin

 
 

Repository files navigation

npm versionDependency StatusBuild statusWindows build statusjs-semistandard-stylebitHound Dependencieslicense

NPM

This is awebpack plugin that simplifies creation of HTML files to serve yourwebpack bundles. This is especially useful for webpack bundles that includea hash in the filename which changes every compilation. You can either let the plugin generate an HTML file for you, supplyyour own template using lodash templates or use your own loader.

Maintainer: Jan Nicklas@jantimon

Installation

Install the plugin with npm:

$ npm install html-webpack-plugin --save-dev

Third party addons:

The html-webpack-plugin provideshooks to extend it to your needs.There are already some really powerful plugins which can be integrated with zero configuration:

Basic Usage

The plugin will generate an HTML5 file for you that includes all your webpackbundles in the body usingscript tags. Just add the plugin to your webpackconfig as follows:

varHtmlWebpackPlugin=require('html-webpack-plugin');varwebpackConfig={entry:'index.js',output:{path:'dist',filename:'index_bundle.js'},plugins:[newHtmlWebpackPlugin()]};

This will generate a filedist/index.html containing the following:

<!DOCTYPE html><html><head><metacharset="UTF-8"><title>Webpack App</title></head><body><scriptsrc="index_bundle.js"></script></body></html>

If you have multiple webpack entry points, they will all be included withscripttags in the generated HTML.

If you have any CSS assets in webpack's output (for example, CSS extractedwith theExtractTextPlugin)then these will be included with<link> tags in the HTML head.

Configuration

You can pass a hash of configuration options toHtmlWebpackPlugin.Allowed values are as follows:

  • title: The title to use for the generated HTML document.
  • filename: The file to write the HTML to. Defaults toindex.html.You can specify a subdirectory here too (eg:assets/admin.html).
  • template: Webpack require path to the template. Please see thedocs for details.
  • inject:true | 'head' | 'body' | false Inject all assets into the giventemplate ortemplateContent - When passingtrue or'body' all javascript resources will be placed at the bottom of the body element.'head' will place the scripts in the head element.
  • favicon: Adds the given favicon path to the output html.
  • minify:{...} | false Passhtml-minifier's options as object to minify the output.
  • hash:true | false iftrue then append a unique webpack compilation hash to allincluded scripts and CSS files. This is useful for cache busting.
  • cache:true | false iftrue (default) try to emit the file only if it was changed.
  • showErrors:true | false iftrue (default) errors details will be written into the HTML page.
  • chunks: Allows you to add only some chunks (e.g. only the unit-test chunk)
  • chunksSortMode: Allows to control how chunks should be sorted before they are included to the html. Allowed values: 'none' | 'auto' | 'dependency' | {function} - default: 'auto'
  • excludeChunks: Allows you to skip some chunks (e.g. don't add the unit-test chunk)
  • xhtml:true | false Iftrue render thelink tags as self-closing, XHTML compliant. Default isfalse

Here's an example webpack config illustrating how to use these options:

{entry:'index.js',output:{path:'dist',filename:'index_bundle.js'},plugins:[newHtmlWebpackPlugin({title:'My App',filename:'assets/admin.html'})]}

FAQ

Generating Multiple HTML Files

To generate more than one HTML file, declare the plugin more thanonce in your plugins array:

{entry:'index.js',output:{path:'dist',filename:'index_bundle.js'},plugins:[newHtmlWebpackPlugin(),// Generates default index.htmlnewHtmlWebpackPlugin({// Also generate a test.htmlfilename:'test.html',template:'src/assets/test.html'})]}

Writing Your Own Templates

If the default generated HTML doesn't meet your needs you can supplyyour own template. The easiest way is to use thetemplate option and pass a custom HTML file.The html-webpack-plugin will automatically inject all necessary CSS, JS, manifestand favicon files into the markup.

plugins:[newHtmlWebpackPlugin({title:'Custom template',template:'my-index.ejs',// Load a custom template (ejs by default see the FAQ for details)})]

my-index.ejs:

<!DOCTYPE html><html><head><metahttp-equiv="Content-type"content="text/html; charset=utf-8"/><title><%= htmlWebpackPlugin.options.title %></title></head><body></body></html>

If you already have a template loader, you can use it to parse the template.Please note that this will also happen if you specifiy the html-loader and use.html file as template.

module:{loaders:[{test:/\.hbs$/,loader:"handlebars"}]},plugins:[newHtmlWebpackPlugin({title:'Custom template using Handlebars',template:'my-index.hbs'})]

You can use the lodash syntax out of the box.If theinject feature doesn't fit your needs and you want full control over the asset placement use thedefault template of thehtml-webpack-template project as a starting point for writing your own.

The following variables are available in the template:

  • htmlWebpackPlugin: data specific to this plugin

    • htmlWebpackPlugin.files: a massaged representation of theassetsByChunkName attribute of webpack'sstatsobject. It contains a mapping from entry point name to the bundle filename, eg:

      "htmlWebpackPlugin": {"files": {"css": ["main.css" ],"js": ["assets/head_bundle.js","assets/main_bundle.js"],"chunks": {"head": {"entry":"assets/head_bundle.js","css": ["main.css" ]      },"main": {"entry":"assets/main_bundle.js","css": []      },    }  }}

      If you've set a publicPath in your webpack config this will be reflectedcorrectly in this assets hash.

    • htmlWebpackPlugin.options: the options hash that was passed tothe plugin. In addition to the options actually used by this plugin,you can use this hash to pass arbitrary data through to your template.

  • webpack: the webpackstatsobject. Note that this is the stats object as it was at the time the HTML templatewas emitted and as such may not have the full set of stats that are availableafter the wepback run is complete.

  • webpackConfig: the webpack configuration that was used for this compilation. Thiscan be used, for example, to get thepublicPath (webpackConfig.output.publicPath).

Filtering chunks

To include only certain chunks you can limit the chunks being used:

plugins:[newHtmlWebpackPlugin({chunks:['app']})]

It is also possible to exclude certain chunks by setting theexcludeChunks option:

plugins:[newHtmlWebpackPlugin({excludeChunks:['dev-helper']})]

Events

To allow otherplugins to alter the HTML this plugin executes the following events:

Async:

  • html-webpack-plugin-before-html-generation
  • html-webpack-plugin-before-html-processing
  • html-webpack-plugin-alter-asset-tags
  • html-webpack-plugin-after-html-processing
  • html-webpack-plugin-after-emit

Sync:

  • html-webpack-plugin-alter-chunks

Example implementation:html-webpack-harddisk-plugin

Usage:

// MyPlugin.jsfunctionMyPlugin(options){// Configure your plugin with options...}MyPlugin.prototype.apply=function(compiler){// ...compiler.plugin('compilation',function(compilation){console.log('The compiler is starting a new compilation...');compilation.plugin('html-webpack-plugin-before-html-processing',function(htmlPluginData,callback){htmlPluginData.html+='The magic footer';callback(null,htmlPluginData);});});};module.exports=MyPlugin;

Then inwebpack.config.js

plugins:[newMyPlugin({options:''})]

Note that the callback must be passed the htmlPluginData in order to pass this onto any other plugins listening on the samehtml-webpack-plugin-before-html-processing event.

Contribution

You're free to contribute to this project by submittingissues and/orpull requests. This project is test-driven, so keep in mind that every change and new feature should be covered by tests.This project uses thesemistandard code style.

Before running the tests, make sure to executeyarn link andyarn link html-webpack-plugin (or the npm variant of this).

License

This project is licensed underMIT.

About

Simplifies creation of HTML files to serve your webpack bundles

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript99.8%
  • HTML0.2%

[8]ページ先頭

©2009-2025 Movatter.jp