☕
Laravel Mix 覚書
使うけど、使い方を間違えてた部分がちらほらあったので、それの覚書。
laravel-mix のバージョンは ^6.0.6 を想定し、Laravel 上では mix
ヘルパーを使ってJSを読み込んでいます。(Blade のテンプレートで <script tyep="application/javascript" src="{{ mix('js/app.js') }}"></script>
といった感じ。)
とりあえず minify にすることを「コンパイル」と、便宜上ここでは言います。
develop/prod コンパイル
npm run watch
で編集中のファイルもコンパイルをしてくれ、 npm run prod
で本番用のコンパイルをしてくれます。
そして webpack.min.js
では if (mix.inProduction())
といった条件分岐で分別をする事ができます。
console.log/console.debug を削除
mix.options
に、下記のようなオプションを加えるとうまくいきます。
mix.options({
terser: {
terserOptions: {
compress: {
drop_console: true,
},
},
},
});
jsファイルのキャッシュコントロール
mix.version();
を加え、Blade 側で mix('js/app.js')
とやれば /js/app.js?<hash>
という形に展開されます。 <hash> はproduction コンパイルをする度に変わる値です。これにより、変更の度にブラウザがそれらのファイルを都度読みに行きます。
結果
結果的に個人的には下記のような webpack.min.js
を使ってます。
const mix = require('laravel-mix');
if (mix.inProduction()) {
// console.debug だけをプロダクションコンパイルのときは消す
mix.options({
terser: {
terserOptions: {
compress: {
drop_console: true,
},
},
},
});
} else {
mix.webpackConfig({
devtool: 'source-map',
});
mix.sourceMaps();
}
mix.
sass('resources/assets/sass/bootstrap.scss', 'public/assets/css/bootstrap.css')
js('resources/js/app.js', 'public/js/app.js');
if (mix.inProduction())
mix.version();
Discussion