webpack入門その1(JavaScriptファイルをバンドルする)
今回はフロントエンドで近年ほぼ必須となっているwebpackについて基本的な使い方を紹介する。
ただし一気に全部紹介してしまうと、初見では意味がわかりづらい横文字も多く読んでいくうちによくわからずに挫折しかける人も多そうなのでシンプルにJavaScriptファイルをバンドルするところまでやる。
今回の対象読者
- webpackを試してみたい人
- JavaScriptの基礎を把握している人
前提条件
- PCにバージョン6.11.5以上のNode.jsインストール済みであること
今回使用した動作環境
Windows10 Home Version1903の
Ubuntu 18.04 LTS(WSL1)
サンプルコード
webpackって?
一言でいえばJavaScriptなどのファイルをまとめてくれるツールです。こうしたまとめ機能を持つモジュールバンドラと呼ばれるツールの一つに分類されます。 複数のライブラリ/モジュールや機能を使うアプリケーションの開発で効力を発揮してくれます。
使用する上で覚えた方がいい用語
webpackを使う上で最低限覚えるべき用語は以下のとおり。
用語 | 意味 |
---|---|
モジュール | JavaScriptやCSSなどwebpackでまとめられるファイル |
バンドル | webpackでまとめられたファイル |
バンドルする | 〇〇をまとめる |
ビルド | バンドルを出力するまでの処理 |
主なメリット
バンドルしたファイルを読み込むだけでいいので、複数のモジュールを記載する必要がなくなり可読性が向上する*2
webpackのインストールから実際にバンドルするまで
詳細まで細かく記載するとブログ記事の範疇を超えてしまうので長くなるので、筆者が実際に行った手順を備忘録として以下のURLにのせておきました。上述のサンプルコードを使用しています*3。
https://miily8310s.github.io/webpack-kihon/#/
本記事では要点だけ紹介します。 基本的な流れは以下のとおりです。それぞれ説明していきます。
- webpackをnpmでインストール
- サンプルコードの準備
- 設定ファイル(webpack.config.js)を作成する
- 実際にバンドルしてみて動作確認する
1.webpackをnpmでインストール
使用するpackage.json
が存在している状態で、以下のコマンドを入力する。
インストールする際はwebpackだけでなくwebpack-cliも必要です。
npm i webpack webpack-cli --save-dev
または
yarn add webpack webpack-cli --save-dev
2. サンプルコードの準備
今回は以下のディレクトリで進めます。
・ ├── node_modules ├── package.json ├── package-lock.json* ├── public | ├── index.html | └── js | └── bundle.js └── src └── js ├── app.js └── modules ├── celsius.js └── fahrenheit.js *yarnコマンドで進める際はyarn.lock
バンドルするJavaScriptファイルを作成し、celsius.js
とfahrenheit.js
からエクスポートした関数をapp.js
でインポートします。
celsius.js
export default function celsius(number) { return number; }
fahrenheit.js
export default function fahrenheit(number) { return number * (9 / 5) + 32; }
app.js
import celsius from './modules/celsius'; import fahrenheit from './modules/fahrenheit'; const celsTemp = celsius(26); const fahrTemp = fahrenheit(35); document.body.innerHTML = `<p>${celsTemp} ${fahrTemp}</p>`
celsius.js
とfahrenheit.js
は摂氏・華氏をそれぞれ出力するコードです。app.js
はhtmlにその摂氏・華氏をpタグで出力するコードです。
3. 設定ファイル(webpack.config.js)を作成する
webpackの設定用ファイルのwebpack.config.js
を作成します。
# webpack.config.js const path = require("path"); module.exports = { mode: "development", entry: "./src/js/app.js", output: { filename: "bundle.js", path: path.resolve(__dirname, "public/js"), }, };
設定項目の意味は以下の通りです。
- mode:モードを開発用もしくは本番用
- entry:バンドルするファイルを指定
- output:出力するディレクトリ・ファイル名を指定
出力されるbundle.js
をindex.html
で指定します。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>webpack-sample</title> </head> <body> <script src="js/bundle.js"></script> </body> </html>
4.実際にバンドルしてみて動作確認する
package.json
のscript
にbuild
があり、そのbuild
にwebpack
コマンドが指定されていることを確認し、以下のコマンドを入力してください。
npm run build
するとwebpackが動作して、コマンドに以下のようなものが流れてきます。
> after@1.0.0 build /home/××/blog_sample/Webpack_sample/after > webpack Hash: 96f1c1c3120c5dbf936c Version: webpack 4.43.0 Time: 57ms Built at: 06/26/2020 11:12:29 AM Asset Size Chunks Chunk Names bundle.js 5.56 KiB main [emitted] main Entrypoint main = bundle.js [./src/js/app.js] 212 bytes {main} [built] [./src/js/modules/celsius.js] 61 bytes {main} [built] [./src/js/modules/fahrenheit.js] 79 bytes {main} [built]
これでindex.html
を開いてみると摂氏・華氏が出力された状態で表示されているはずです。
参考書籍
おそらく自分が読んだ中でこれが一番わかりやすかった。サンプルコードがシンプルかつ短いので読みやすい。Kindle Unlimitedの加入者は無料。
次回は未定ですが、Pythonでそろそろコーディング問題を練習していきたい気持ちなので、leetcodeの記事でも書こうかなと。
(2020/07/02 追記) leetcodeの記事作ろうと思ってたけど、easyかつgood率が5割以上超えているProblems解くだけで十分ですこれ。introductionはやらなくてもいい。ただしこの手のコーディングテストでよく使う文法のまとめを近日記事にすることは考えてる。 webpackの続編はしばらく書く予定はありません。discord.jsでのdiscord bot作成中なので次はdiscord.jsの記事にする予定です。
*1:Webページを表示するときにはJavaScriptとかCSSファイルが転送されるが、転送するファイルの数が増えるとその分表示が遅くなってしまう欠点がある
*2:モジュールが多くなるほど読み込むためのhtmlのscriptタブが増えてしまうからね
*3:複数の記事に分けてもよかったけど、いっそこちらでドキュメントサイト作ったほうが見やすいかなと。あと続編の記事も同サイトに載せたかったのも