一からwebpackに入門してみる
はじめに
対象読者:Javascirptというスクリプト言語を知っており、なんとなくnpmを使ったことがある人。
目的:なんとなくwebpackについての概要を知る
近年のjavascriptの背景状況を把握しwebpackの位置づけを理解、実際に使ってみることでなんとなくWebpackについて知った気になることが目標。
Javascriptの背景状況
近年、サイト構成が複雑になるにしたがってJavascirpt構成も肥大化していった。
scriptを別ファイルに分けた際、そこに依存関係が発生しているとscriptの読み込みの順番も工夫する必要が出てきた。
<script src="./B.js"></script>
<script src="./C.js"></script>
<script src="./A.js"></script>
上記はAがB,Cに依存している例。
Aを読み込む前にBとCを読み込む必要がある。
ファイルが少なければ手動管理ができるが、ファイルが膨大になると手動で管理することが困難になってきた。
この問題を解決するためにJavascriptでは「モジュール」という概念がある。jsプログラムを分割し、必要なタイミングでインポートをすることで読み込みの管理が容易になった。
import B from './B.js'
import C from './C.js'
これをAに記入することでAを読み込んだ際に依存状態であるB,Cも読み込むことができる。
バンドル化
このような背景から、javascriptはモジュールごとにファイルを分ける等、さらにファイル数が増大する傾向になった。
しかし新しい問題として「ブラウザとサーバーの同時接続に限界があるため、複数ファイルの転送に時間がかかる」というものが出てきた。この解決方法として挙げられたのが「バンドル化」。
バンドル化を行うと膨大なjsファイルを一つにまとめることができる。これによってサーバーへのリクエスト数を減らすことができ、読み込み時間の短縮が見込める。このバンドル化の過程でjsファイルの読み込み等を行う必要があるため、nodeJS環境が必要になる。
webpackとは
webpackとはバンドル化、つまり複数のJavascriptまとめて一つのファイルにすることができるツール。これによって先に述べた読み込み時間の短縮が可能になる。
追加機能として
- JSファイルの圧縮
- CSSやimageなどを含めたバンドル化
- ローカルサーバーの起動環境の提供
など、バンドル化以外にも様々な機能がある。これによって色々なライブラリをいれることなくwebpackのみで完結させることができる優位性が出てくる。
実際にwebpackを使ってみる
大体のバンドル化されるまでの流れ
- srcフォルダにindex.jsを用意
- webpackの設定に従ってファイルが読み込まれる
- バンドル化が行われ、outputに指定したdistフォルダに出力される
- バンドル化されたjsをhtmlファイルで開くと正常に動作する
今回使うもの
webpack:バンドルツール、今回の主役
webpack-cli:webpackのコマンド等を柔軟に提供するらしい。ほぼ必須。
winbox:最近流行ってるやつ。簡単にDnDできるウィンドウを生成できる。今回はこのライブラリをimportしてhtmlに表示できれば成功
手順
- yarn init (npm init)
- 各ライブラリをadd
yarn add webpack webpack-cli winbox
- srcディレクトリを作成、中にindex.jsを作りコードを記入。今回はimportしてウインドウを出すだけ。
import 'winbox'
console.log("hello world!")
new WinBox("Basic Window")
- webpack.config.jsを作成し記入
module.exports = {
// モードの設定
mode: 'development',
// エントリーポイントの設定
entry: './src/index.js',
// 出力の設定
output: {
// 出力するファイル名
filename: 'main.js',
// 出力先のパス(絶対パスを記入する)
path: `${__dirname}/dist`
},
};
-
yarn webpackでビルド。ビルド結果はoutputの指定先に入る。今回はdistディレクトリ。
-
htmlでビルドしたmain.jsを読み込んでみる。今回はdistにindex.htmlを作る。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script defer src="./main.js"></script>
<title>webpackコトハジメ</title>
</head>
<body>
</body>
</html>
完成。成功するとこうなる。
まとめ
- webpackは複数のjsモジュールを一つのjsとしてまとめるツール
- まとめる際にファイル圧縮をしてくれたりする
- jsファイルの読み込み、書き込みをするためnodeJS環境が必要になる。
参考サイト
誤字、脱字、ご指摘等あればコメントかTwitterまでよろしくお願いします。
Discussion