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プロジェクトで利用する方法を説明しました。ローダーとプラグインを併用して、さまざまなファイル変換や、追加タスクを実行できます。さまざまな処理を自動化でき、作業効率を大きく向上できるツールです。