[まとめ]webpackの使い方

こんにちは。KOUKIです。

最近webpackを学習したので、そのまとめをします。

webpackとは

webpackは、Node.js上で動く静的ファイル(モジュール)のバンドラーです。

JavaScript, CSS, SCSS, PNGファイルなどの情報を一つのJavaScriptファイルの纏めてくれるツールです。

フロントエンド開発では最もよく使われます。

npm trends

環境

webpackを使用するには、Node.jsをインストールしておく必要があります。

私の環境では、以下のバージョンで動作しています。

プロジェクトの作成

Desktop上にlearning-webpackフォルダを作成し、そこで学んでいきましょう。

初期化(npm init)

最初に初期化を行います。

npm initに成功するとフォルダは以下にpackage.jsonが作成されます。

package.jsonはjson形式で記載されたインストールしたパッケージを管理するためのファイルです。

このファイルは、パッケージのバージョン管理をしたり、プロジェクト起動時に実行したいコマンドを指定できるなど、様々な使い方ができます。

これから様々なパッケージをインストールしますが、必ず「package.jsonがカレントディレクトリに存在すること」を確認してからコマンドを実行してください。

webpackのインストール

webpackをインストールします。

live-serverのインストール

live-serverパッケージをインストールするとプロジェクト配下のファイルを監視し、変更があった場合、ブラウザ上にその変更内容を即時に反映してくれるようになります。

プロジェクト配下にindex.htmlを作成しましょう。

ファイルの中身は、以下になります。

上記には、lodashが入っていますが、今は使いません。

UNPKG
lodash
lodash code

terminal上で以下のコマンドを実行してください。

このコマンドを実行すると自動的にブラウザが立ち上がり、index.htmlの中身を表示してくれます。

webpackを利用する

webpackは、js,css,scssなどの静的ファイルを”一つのJavaScriptファイルに収めてしまう方法です。

さっそくその力を使ってみましょう。

まずは、webpackを利用していない状態で、挙動確認を行います。

index.jsを作成したので、中身を書いていきます。

このソースファイル中には、lodashを使っています。

lodashを使うと、配列の処理がびっくりするほど簡単に書けます。

画面を表示してみましょう。

lodashで処理した文字列が画面上に表示されたことが分かったと思います。

次にwebpackを利用してみます。

webpackは、webpack.config.jsに設定を書き込みます。

このファイルには色々な設定を書き込むことになりますが、ひとまずwebpackのバンドル対象、出力ファイル名、出力場所を記述しておきます。

ここまで出来たら、以下のコマンドを実行してください。

distフォルダは以下を確認するとmain.jsファイルが作成されていることが分かると思います。

このmain.jsには、index.jsの情報はもちろん、loaderのモジュール情報も格納されています。

index.jsを以下のように修正しましょう.

index.htmlを以下のように修正しましょう。

live-serverを起動して、画面を確認してみましょう。

webpack-dev-serverの導入

live-serverと同じことができるwebpack-dev-serverを導入しましょう。

webpack-dev-serverを起動するコマンドは、以下です。

このコマンドをpackage.jsonに組み込みましょう。

ついでに、デフォルトルートを指定し、dist配下のindex.htmlが表示されるようにしてしまいましょう。

devServerが追加した設定です。

これからは、以下のコマンドで起動が可能です。

モジュールについて

Node.jsにおけるモジュールについて少し確認しておきましょう。

webpack.config.jsでは、次の記述をしました。

このmoduleとは一体?という感じですよね?

このmoduleは、JavaScriptファイル(webpack.config.js)自身を指しており、この中に設定された機能を外部で使えるようにしています。

次のファイルを作成してください。

中身は次のように書きます。

index.jsを更新します。

サーバーを起動して、コンソールを確認してみましょう。

module.exportsを利用するともう少し構造化できます。

css-loaderとstyle-loaderを導入

css-loaderは、CSSをjavascriptと扱うローダーで、style-loaderは、htmlファイルにstyleを適用させるローダーです。

この二つのローダーを適用しましょう。

次にwebpack.config.jsにローダーを設定するわけですが、一つ注意点があります。

loader features

「A chain is executed in reverse order.」と記述が重要なのですが、設定ファイルに記述したローダーは、逆順で実行されるそうです。

以下の設定だとcss-loader -> style-loaderの順で実行されます。

通常は、css-loaderでcssをJavaScript化してからStyleを適用させたいはずなので、この順番になっていないとエラーになります。

次は、cssファイルを作りましょう。

次は、index.jsを修正します。

サーバーを起動してみましょう。CSSが適用された画面が見えるはずです。

url-loaderとfile-loaderの導入

CSS同様に画像ファイルもwebpackageで扱えるようにします。

webpack.config.jsに以下の設定ファイルを追加します。

srcフォルダ配下に適当な画像ファイルを格納してください。

次は、index.jsを修正します。

以下のコマンドで、サーバーを起動してください。

sass-loader の導入

続いて、sass-loaderを導入します。

webpack.config.jsの設定に以下を追加します。

CSSと設定が重複していますが、あとで修正します。

ひとまず、scssファイルを作成しましょう。

index.jsも修正します。

サーバーを立ち上げるため、次のコマンドを実行してください。

babelとReact環境の構築

Babelを用いるとモダンなJS記法をどのようなブラウザでも解釈できるような形に変換できます。

JavaScriptには、アロー関数など新しい記法がどんどん出てきていますが、ブラウザによっては対応していないものもあります。

<最新の記法>

では、さっそくパッケージをインストールします。
installの参考

インストールが完了したらbabelの設定ファイルを作成します。

この設定ファイルにはbabelによって変換する対象を記述します。

下記だとESとreactコードを変換対象にしています。

次は、webpack.config.jsに設定を追加します。

続いて、index.jsを書き換えます。

続いて、index.htmlを書き換えます。

ここまで設定したらサーバーを起動しましょう。

mini-css-etract-plugin導入

mini-css-extract-pluginで、CSSの圧縮ができます。

webpack.config.jsを修正します。

cssとscssの設定もここで一つにしてしまいましょう。

index.jsの修正をします。

index.htmlの修正をします。

サーバーを起動しましょう。

uglifyjs-webpack-plugin

uglifyjs-webpack-pluginにて、console.logの自動削除をしましょう。

package.jsonのscriptsにlaunchを追加します。

npm run launchコマンドを実行したときは、本番環境用の環境が立ち上がります。

webpack.config.jsにも設定を追加します。

UglifyJsPluginは、内部でUglifyJSを使っています。

上記の通り、cconsole.logを消したい場合は、drop_consoleの設定をtrueにする必要があります。

index.jsの中にconsole.logを仕込んでみましょう。

次のコマンドを実行して、ログが出力されるか確認してください。

optimize-css-assets-webpack-plugin 導入

本番環境下で圧縮したCSSファイルを配信するためのプラグインを導入します。

webpack.config.jsに設定を追加します。

設定例

次のコマンドでビルドしてみましょう。

dist配下に「main.hash.css」ファイルができるので、開いてみましょう。

見事に圧縮されていますね。

ソースマップの導入

バンドルされたコードのエラー追跡は難しいです。

ソースマップを作成して、エラー追跡をやりやすくしましょう。

Devtoolを見ると色々なツールがありそうですが、「eval-source-map」を使います。

webpack.config.jsの最後尾に次の設定をいれてください。

index.jsに誤った関数を入力してください。

サーバーを起動して、コンソールを確認してみてください。

余力がある人は、devtoolの設定を外した状態でもエラーを確認してみてください。

eslint-loaderの導入

最後にeslint-loaderを導入します。

これは、構文チェックなどによく使われるものです。

次のコマンドで初期化します。

このコマンドの実行に成功すると「.eslintrc.json」が作成されます。

webpack.config.jsの設定を変更します。

次のコマンドを実行しましょう。

eslintでチェック後、次のエラーが表示されると思います。

JSXは、JavaScriptファイル内に書くことは推奨されていないため、構文エラーになります。

しかし、JSXは、JavaScript内にあっても問題ないと思うため、設定で回避します。

.eslintrc.jsonに次の設定を追加してください。

もう一度、以下のコマンドを実行してください。

今度は、エラーが消えているはずです。

おわりに

長くなりましたが、webpackの使い方は以上です。

JavaScript、CSS, SCSS, 画像ファイルを一つのJavaScriptファイルに纏めて管理するこのツールは大変優秀ですね。

まだまだ使い方に慣れていないので、仕事・プライベート問わず、ガンガン導入していきたいと思います。

それでは、また!

関連

こちらもどうぞ。

コメントを残す