【webpack速習】vol.1: 概要 & Getting Started
個人ではなんとなくコピペで使っていたwebpack。
会社業務で使っている webpack のビルドを早くしたいのだけれど、ちゃんと webpack について理解しておらず設定ファイルをうまくいじれないのが悔しいので、ちゃんと1から学ぼうと思います。
volいくつまで続くかわかりませんが、ひとまず今回は、webpackの概要と、実際に動かしてみるところまで。
基本的なスタンスとしては、参考情報はwebpackの公式ドキュメントをベースにしつつ、その他随時ググった記事を頼りにしていきたいと思います。
うまくまとめるというよりはログを残す感じになるので雑な内容になるかもしれませんのであしからず。
webpackとは何か
- 複数のJavaScriptファイルをまとめるモジュールバンドラ(これが本質)
- JavaScriptモジュールの依存関係を解決して、静的ファイルを出力する
- モジュールの呼び出し順などを自動で解決
- webpack.config.js に設定を書き、コマンドラインで実行
- 実行には node.js が必要
- ローダーやプラグインといった機能で、ファイルをバンドル時にカスタムタスクを実行できる
webpackの本質
- ES Modules のエミュレート
- node_modules のリンカ
- 拡張子ごとの変形
それ以外は基本おまけと考える
webpackと似たもの
- gulp
- grunt
- npm script
- parsel
- etc...
gulp はJSや画像の圧縮、sassのコンパイルなどのタスクを自動で実行するタスクランナー。
webpack はあくまで JavaScript ファイルのモジュールバンドラ。
webpackの基本要素
- Entry(エントリー)
- JavaScriptファイルをバンドルする上で、どのファイルを基準として依存関係を解決するかを指定
- 複数のエントリーを指定可能
- Output(アウトプット)
- バンドルしたファイルを、「どこ」に「どのような名前」で出力するかを指定
- Loader(ローダー)
- webpack 自体はJavaScriptしか理解できないが、ローダーを使用することでcssやhtmlなどのファイルをモジュールに変換して処理を行える
- webpack.config.js には 「ファイル名」と「適用する処理内容」を記述
- Plugin(プラグイン)
実際に動かす
Getting Started | webpack をやってみての要点です。
- まずは適当なディレクトリを作って、npm 初期化を行い、
webpack
と webpack をコマンドラインで実行できるようにするためにwebpack-cli
をインストールする。 (yarn で行っています)
mkdir webpack4 cd webpack4 yarn init -y yarn add webpack webpack-cli --dev
- 誤ってnpmで公開されないように
package.json
に"private": true,
を追加する。
"private": true の意味
If you set "private": true in your package.json, then npm will refuse to publish it.
This is a way to prevent accidental publication of private repositories. (以下略)
package.jsonで "private"をtrueに設定した場合、npmはそれを公開することを拒否します。
これは、プライベートリポジトリが誤って公開されるのを防ぐための方法です。
(npm-package.json | npm Documentation より)
基本的にクローズなプロジェクトであれば "private": true,
にしておいた方がよい。
src
(source) フォルダ とdist
(distribution) フォルダで分ける
npm install --save
? npm install --save-dev
?
- 本番公開用のJavaScriptにバンドルされるパッケージをインストールするときは、
npm install --save
を使用 開発目的でパッケージをインストールする場合(例えばlinter、テストライブラリなど)、
npm install --save-dev
を使用import ... from ...;
のように書くことで、モジュールがどんな依存関係があるかわかり、webpack はその情報を使って依存関係グラフを作る。
そのグラフを使って、正しい順番で実行される最適化されたバンドルを生成するimport
文、export
文 は es2015からの記法のため通常はそのまま使えないが、webpackはそのままサポートしている- 詳しくは Module Methods | webpack
- webpackは
import
文、export
文 以外のes2015以降のコードは基本変換しない。使用する場合は、Babel
などのトランスパイラーをLoader を介して使用する
config ファイルを作成
webpack4 では設定ファイルは使わずにwebpackを実行することはできるが、プロジェクトとして使う場合大抵は設定ファイルを書く必要がある。
▼ webpack.config.js
const path = require('path'); module.exports = { entry: './src/index.js', output: { filename: 'main.js', path: path.resolve(__dirname, 'dist') } };
path.resolve()
- 一連のパスまたはパスセグメントを絶対パスに解決するメソッド
- 公式ドキュメント:Path | Node.js v11.10.0 Documentation
__dirname
- 現在のモジュールのディレクトリ名
- 公式ドキュメント:Modules | Node.js v11.10.0 Documentation
process.cwd()
と似ているが、これはNode.jsプロセスの現在の作業ディレクトリ(current working directory)を返す
実行コマンド
yarn webpack --config webpack.config.js
※yarn webpack
を実行したときに webpack.config.js
がある場合、デフォルトでその設定で実行される。