CSS Modulesとは?

大規模化するCSSの問題点

Christopherは以下をあげています。

1. グローバルネームスペース
 -> スタイルはグローバルスコープなので、全てに影響がある。JSでグローバル変数は懸念されるのにCSSは許容されている。
2. 依存性
 -> ネストすることによるスコープ。パフォーマンスや再利用性が低下する。
3. デッドコードの削除
 -> どのスタイルがどのコードに影響するか測れない。
4. 縮小
5. 定数の共有
6. 非決定論的な解決
7. 分離

そしてこれらはjavascriptを使ってスタイリングすれば解決すると言いました。
しかしそれでは問題もあるため、この課題に立ち向かって出来上がったのが、CSSモジュール。
CSSモジュールとは

スコープがローカルを約束

各ファイルが別々にコンパイルされるため、スコープがローカルになり、他ファイルへのスタイル影響がなくなる。
そのため、複雑なスタイル名や、複数指定、などが不要となり、シンプルに設計できる。
BEMのような複雑なスタイル名は不要

どうやって実現しているの?

Javascriptで、requireやimportでcssを読み込んで使うことができる。
実際のクラスは一意が約束された名前で自動生成される。

コンポジション

sassのextendのようにinclude指定が可能

CSSモジュールの使い方

1. npm install css-loader でインストールして使う。
2. webpackでcss-loaderを読み込む