webpackに機能を追加するプラグイン
ローダーが特定ファイル形式に対応する変換機能を提供するのに対して、プラグインはより広範な機能をwebpackに追加します。プラグインもローダー同様、「npm install --save-dev」コマンドでインストールして利用します。
JavaScriptの最小化(uglifyjs-webpack-plugin)
uglifyjs-webpack-pluginは、最小化ツールUglifyJSでJavaScriptを最小化します。リスト14(1)のようにプラグインを参照して、(2)のように読み込みます。
// プラグインを参照 ...(1)
var UglifyJSPlugin = require("uglifyjs-webpack-plugin")
module.exports = {
(略)
plugins: [
new UglifyJSPlugin() // プラグインを読み込み ...(2)
]
};
webpackを実行すると、図7のようにJavaScriptが最小化されます。
HTMLファイルの生成(html-webpack-plugin)
html-webpack-pluginは、JavaScriptファイルを参照するHTMLファイルを自動的に出力するプラグインです。リスト15の通り設定します。
var HtmlWebpackPlugin = require("html-webpack-plugin"); // モジュール参照
module.exports = {
(略)
plugins: [
// 既定の設定で出力 ...(1)
new HtmlWebpackPlugin(),
// テンプレートを指定して出力 ...(2)
new HtmlWebpackPlugin({
filename:"index2.html",
template:"index.ejs",
title: "html-webpack-pluginサンプル"
})
]
};
パラメーターなしで指定すると(1)、index.htmlというファイル名でシンプルなHTMLを生成します。(2)のようにパラメーターを与えて、出力するHTMLファイルの設定をカスタマイズできます。ここではindex.ejsというテンプレートファイルをもとに、HTMLファイルindex2.htmlを出力するようにしています。テンプレート(リスト16)に記述された「htmlWebpackPlugin.options.title」の部分に、リスト15で指定したtitleの内容を埋め込んでHTMLファイルを出力できます。
<title><%= htmlWebpackPlugin.options.title %></title>
html-webpack-pluginの詳細な利用法は公式ページを参照してください。
開発用Webサーバーで効率よく開発
webpack-dev-serverはwebpackで利用できる開発用のWebサーバーで、スクリプトを書き換えるたびにWebページを更新できます。インストールして、package.jsonにリスト17(1)のように記述すると、「npm start」コマンドで開発用Webサーバーが起動します。
"scripts": {
"start": "webpack-dev-server", // 開発用Webサーバーを起動 ...(1)
"build": "webpack"
},
開発用Webサーバーの設定はwebpack.config.jsにリスト18の通り記述します。設定できるパラメーターの詳細は公式ドキュメントを参照してください。
module.exports = {
(略)
devServer: {
open: true, // 起動時にブラウザーを開く
contentBase: ".", // Webページの基準となるパス
port: 3000 // ポート番号
},
(略)
}
「npm start」コマンドを実行すると既定のWebブラウザーが起動して、図8のようにWebページが表示されます。JavaScriptファイルを書き換えるとWebページが更新されます。
このサンプル(010-devserver)は、前述したBabelのサンプル(006-loader-babel)をもとにしており、ファイルを修正するたびにBabelの変換処理が自動で実行されます。「Babelで変換→バンドル→Webページ更新」という一連の作業を実行できる意味で、webpackは(Gruntやgulpといった)タスクランナーの機能を備えているといえます。
まとめ
本記事では、モジュールバンドラーwebpackをNode.jsプロジェクトで利用する方法を説明しました。ローダーとプラグインを併用して、さまざまなファイル変換や、追加タスクを実行できます。さまざまな処理を自動化でき、作業効率を大きく向上できるツールです。
