はじめに
LaravelでSassを導入する流れと、実際に私がbladeに反映されずつまづいて改善した流れを書いていきます!
※既にnpm install
が実行された後の内容です。
この記事の内容
- Sass導入の流れ
- Sassが反映されない時の対処
環境
- Docker
- Laravel8.48.2
Sass導入手順
- webpack.mix.jsの確認
最初は以下のようなコードになっているかと思います。
mix.js('resources/js/app.js', 'public/js')
.sass('resources/sass/app.scss', 'public/css')
.sourceMaps();
resources/sass/app.scss
がpublic/css
のapp.cssに変換されるってわけですね。
- bladeファイルのhead内でlinkタグを確認
<!-- Styles -->
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
CSSはcss/app.css
を読み込みにいくよってわけですね。
- sass/app.scssを確認
最初は以下のようなコードになっていると思います。
// Fonts
@import url('https://fonts.googleapis.com/css?family=Nunito');
// Variables
@import 'variables';
// Bootstrap
@import '~bootstrap/scss/bootstrap';
ここにscssを書いていけばコンパイル後にcssとして反映されますが、画面ごとのコンポーネントに分けると気持ちいいですね。
たとえば、top画面のscssを作りたいのであれば、sassディレクトリに_top.scss
というようにアンダーバーから始まるファイル名でscssファイルを作りましょう。
そして忘れてはいけないのは、app.scssにインポートしてあげてください。ちなみにアンダーバーはいりませぬ。
すると以下のようになるはずです。
// Fonts
@import url('https://fonts.googleapis.com/css?family=Nunito');
// Variables
@import 'variables';
@import 'top';
// Bootstrap
@import '~bootstrap/scss/bootstrap';
さて、それではコンパイルしましょう〜!
-
npm run dev
の実行
webpack.mix.jsのあるディレクトリでnpm run dev
を実行すれば、public/app.cssにコンパイルされているはずです。
画面も見て、cssが反映されているか確認しましょう。
ちなみにnpm run watch
で自動コンパイルしてくれるので便利。ページ更新するだけで確認が済みます。
しかし私の場合、コンパイルはされているがcssが反映されてないという状態に・・・
CSSが反映されない時の対処
- キャッシュをクリアする
npm cache clean -f
でキャッシュをクリアしてみましょう。
-
デベロッパーツールでlinkタグを見て、ソースを確認
app.cssの内容が確認できると思いますが、ちゃんとコンパイルされてるでしょうか?
私の場合、ここで反映されていないことが分かったので、リロードして解消しました。 -
version()
をwebpack.mix.jsに足してあげる
※私の場合、別件エラーが出てコンパイルしなかったので.vue()
付け足して解消してます。
mix.js('resources/js/app.js', 'public/js').vue()
.sass('resources/sass/app.scss', 'public/css')
.version()
.sourceMaps();
これでキャッシュを自動更新するようになります。
おわりに
sassが反映されない原因は色々ありそうですが、この記事で解消できれば幸いでございます。
以上