😇
CSS Modules を知らずに導入してしまっていて混乱した話
CSS Modules なんてあったんですね。知りませんでした。
(自分で yarn add
してるのに……)
TL;DR
-
yarn add
するとき、設定ファイルを書くときは何をやってるかちゃんと理解してやろう- 残念だけど当然よね
- css-modules / postcss-modules | GitHub
PostCSS でトランスパイルしたCSSがなんか変
トランスパイル前
body {
.dark {
background-color: #222;
}
}
トランスパイル後(Parcel
+ PostCSS
で実行)
body ._dark_57f73{background-color:#222}
何このクラスのあとのハッシュ??????
CSS Modules というものがあるらしい
どんなキーワードで検索していてたどり着いたのかほぼ覚えてないのですが、
確か
- 何かが有効になってそうだな……(結果的に当たってはいた)
- Parcel CLI のオプションでOFFにできる……?
- Parcel CLI のオプションをいろいろ見る、試してみる
- う〜ん関係なさそう……
- CLI | Parcel
- PostCSS の設定かなぁ……
- そういえば
modules: true
って指定してる(どっかからコピーしてきた)けどこれなんだ……? - "Parcel css modules" とかで検索する
- このサイトが引っかかる
- Parcel で CSS Modules だけ設定が違う理由 | nmm 実験室 Short
- そういえば
- CSS Modules ってなんだ!?
- → これだー!
- そして
Parcel
は関係ない!!!
みたいな感じでたどり着いた気がします。たぶん。
なるほど、BEM的な(?)ネーミング規則を自動でやってくれるのが
CSS Modules なんですね。
- CSS modulesを使ってCSSで名前空間を実現する | Qiita
- CSS Modules 所感 | morishitter blog
- css-modules / postcss-modules | GitHub
よく見ると問題の起こっているプロジェクトの package.json ではちゃんと導入してありますし、
"devDependencies": {
"postcss-modules": "^3.2.2",
}
Parcel の .postcssrc
による設定で有効にしてました……。
{
"modules": true, // ←ココ
"plugins": {
"tailwindcss": {},
"postcss-nested": {},
}
}
CSS Modules のネーミングルールを設定する
せっかくなので有効にしたまま追加の設定も試してみましょう。
.postcssrc
をこのようにしてトランスパイルすると
{
"modules": true,
"plugins": {
"tailwindcss": {},
"postcss-nested": {},
"postcss-modules": {
"generateScopedName": "[name]__[local]",
}
}
}
application.css
body {
.dark {
background-color: #222;
}
}
これが
application.css
body .application__dark{background-color:#222}
こうなってくれます。
なるほどー便利!
よかった解決!
そして今回のプロジェクトには不要なので yarn remove postcss-modules
だ!!(えぇ……)
Discussion