HTMLWebpackPlugin を使うとコンパイル時に、生成された JavaScript ファイルなどが読み込まれている状態の.html
ファイルが作れます。
インストール
以下でインストールします。
yarn add -D html-webpack-plugin
使い方
一番簡単な使い方は、ただ作成したインスタンスをplugins
配列の 1 つとして渡すだけです。例えば以下のような設定があるとします。
const path = require('path')
const HTMLWebpackPlugin = require('html-webpack-plugin')
module.exports = () => {
return {
mode: 'development',
target: 'web',
entry: {
main: path.join(__dirname, 'index.js')
},
output: {
path: path.join(__dirname, 'out'),
filename: '[name].js'
},
plugins: [
new HTMLWebpackPlugin(),
}
}
}
これを元にwebpack
コマンドでビルドした時、output.path
内のディレクトリにindex.html
が作られます。またその.html
ファイルは[name].js
、つまりmain.js
が読み込まれる記載のある状態で作られます。
インスタンスを作る際にはいくらか渡せるオプションがあります。
HTML ファイル名を変える
デフォルトではindex.html
ですが、これを変更したい場合はfilename
オプションを設定します。
以下のようなインスタンスを渡すと、先程のindex.html
がdefault.html
という名前で作られるようになります。
new HTMLWebpackPlugin({
filename: 'default.html`
})
タイトルを変える
title
を設定することで、<title>
タグの中身を好きなテキストに変更できます。
以下のようにすると<title>nju33<</title>
という形で出力されます。
new HTMLWebpackPlugin({
filename: 'nju33.html',
title: 'nju33'
})
HTML マークアップを変える
template
にテンプレートにしたいファイルへの絶対パスを指定すると、そのファイルを元に.html
ファイルを作れます。
例えば以下はtemplate.html
をテンプレートに指定している例です。
new HTMLWebpackPlugin({
template: path.join(__dirname, 'template.html'),
filename: 'template.html',
title: 'template'
})
template.html
はこのようになっています。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body>
</body>
</html>
このテンプレートファイルでは<%= ... %>
により値が展開できます。またインスタンスのオプションがそのままhtmlWebpackPlugin.options
に入っているので、上記ではtitle
を<title>
タグの中に展開されるようなテンプレートになってます。
これをビルドすると<title>template</title>
という形の HTML ファイルが作成されます。
ちなみに JavaScript ファイルは自動的に<body>
タグの中に展開される為問題ないです。
JavaScript でテンプレートを作る
template
の代わりに、templateContent
を使うこともできます。こちらに指定した関数の戻り値が.html
ファイルで出力されます。
この関数は第一引数のオブジェクトから HTML テンプレートのようにhtmlWebpackPlugin
のインスタンスが受け取れる為、それを使い自由にマークアップできます。
例えば以下のようにすると HTML テンプレートと同じマークアップを得られます。
new HTMLWebpackPlugin({
templateContent: ({ htmlWebpackPlugin }) => {
return `
${htmlWebpackPlugin.options.title}
`
},
filename: 'template-content.html',
title: 'template-content'
})
これをビルドすると<title>template-content</title>
という形の HTML ファイルが作成されます。
例
HTMLWebpackPluginnju33-com/example-html-webpack-plugin をクローンすると上記をてっとり速く確認することができます。
その際は以下のコマンドを実行してください。
yarn
yarn dev
open http://localhost:33948/