[webpack] webpack 2 入門: まとめと目次
何度かに分けて webpack を調査した記事のまとめと目次です。
[markdown]
## この連載記事のゴール
以下の機能を yarn/webpack で組み立てます。
– JavaScript … JS bundle, Babel
– CSS … Sass, PostCSS
– Lint … ESLint
– Server … webpack-dev-server
これらは [Middleman](https://www.d-wood.com/blog/tag/middleman), [_S](https://www.d-wood.com/blog/tag/_s)([Iemoto](https://www.d-wood.com/blog/tag/iemoto)) への適用を想定するなど、筆者の個人的な要件に沿っています。
そのため、ここでは以下の技術には触れません。
– Task Runner … Grunt, gulp etc.
– Templating … Jade, Handlebars etc.
– Test … mocha etc.
– Frameworks … React, AngularJS etc.
但し、将来的に採用技術が変わることもあり得ますので、他の環境でも応用できるよう分かりやすい単位で分割しました。
## ソースと対応バージョン
後で参照しやすいように、成果物は下記に上げました。
また各記事にも、そこまでの差分へのリンクがあります。
> * [DriftwoodJP/sandbox-webpack: webpack tutorial example sources.](https://github.com/DriftwoodJP/sandbox-webpack)
対応バージョンは、以下の通りです。
“`prettyprinted
% yarn –version
0.24.6
% $(yarn bin)/webpack –version
2.6.1
“`
## 目次
チュートリアル形式となっているので、順を追って進めると概要が把握できるようにまとめています。
単体で取り出してもほぼ機能するはずです。
1. [bundle の仕組み](https://www.d-wood.com/blog/2017/05/29_8991.html)
1. [debug, sourcemap, uglify, watch](https://www.d-wood.com/blog/2017/06/01_8997.html)
1. [babel による JavaScript のトランスパイル](https://www.d-wood.com/blog/2017/06/02_8999.html)
1. [eslint-loader で ESLint する](https://www.d-wood.com/blog/2017/06/02_9003.html)
1. [HtmlWebpackPlugin を利用して表示 HTML を自動生成する](https://www.d-wood.com/blog/2017/06/05_9005.html)
1. [CSS や image を bundle する](https://www.d-wood.com/blog/2017/06/06_9007.html)
1. [ProvidePlugin で依存するライブラリを autoload する](https://www.d-wood.com/blog/2017/06/06_9020.html)
1. [Extract Text Plugin で CSS ファイルを出力する](https://www.d-wood.com/blog/2017/06/07_9023.html)
1. [sass-loader で scss ファイルを扱う](https://www.d-wood.com/blog/2017/06/08_9026.html)
1. [postcss-loader で PostCSS plugin を利用する](https://www.d-wood.com/blog/2017/06/08_9029.html)
1. [webpack-dev-server で LiveReload & Watch 対応のサーバをたてる](https://www.d-wood.com/blog/2017/06/09_9033.html)
1. [まとめと目次](https://www.d-wood.com/blog/2017/06/11_9041.html)
## 参考ソース・補足情報
### 公式
現在のバージョンは webpack 2 となっています。
ネット上の少し古めの情報は v1 のことが多く、微妙に違う部分があるので注意が必要です。
> * [webpack](https://webpack.js.org/)
> * [webpack – github](https://github.com/webpack)
そしてこれらの記事のポスト中に **v3.0.0 RC のアナウンス** がありました。
> * [Release v3.0.0-rc.1 · webpack/webpack](https://github.com/webpack/webpack/releases/tag/v3.0.0-rc.1)
### アウトラインをつかむためのポイント
取り組み始めた当初は webpack の特徴をつかんでおらず混乱していました。
こちらの記事を読むことで理解が進みました。
> * [【意訳】Webpackの混乱ポイント – Qiita](http://qiita.com/chuck0523/items/caacbf4137642cb175ec)
> * [なんとなくで理解しないWebpackのCSS周辺 – Qiita](http://qiita.com/inuscript/items/0574ab1ef358fecb55b9)
– **webpack** は、JavaScript も CSS も image なども含め「 **全てのデータを JavaScript の module として扱い、これらを bundle する** 」という振る舞いが基本である。
– **Loader** は、ECMAScript2015 や Sass など「 **webpack が扱える形式を増やしたい** 」場合に利用される。
– **Plugin** は、ファイル出力など「 **それ以外の機能を差し込みたい** 」場合に利用される。
解釈に間違いがあればごめんなさい。
ちなみに loader 間のデータの受け渡しは、JSON 形式だそうです。
### ドキュメントの読み方
公式のドキュメントやネット上の情報を調べると、書き方がまちまちで混乱することがありました。
v1 -> v2 の読み替えや `webpack.config.js` の記述にあたり、こちらの情報が大変参考になりました。
> * [webpack2へ移行する軽いメモ – 技術探し](http://abouthiroppy.hatenablog.jp/entry/2017/02/03/212817)
([なかのひと](https://github.com/abouthiroppy)でした。ありがとうございました。)
## 所感
webpack で *-loader をいろいろ追加すると負債が膨らむ感じがする。
極力シンプルにして、付加的な機能は npm scripts から直接実行する設計が良さそう。— DriftwoodJP (@DriftwoodJP) June 21, 2017
[/markdown]