Laravel Mix 4 Released
Published on by Paul Redmond
Last week Jeffrey Way shipped Laravel Mix v4, the next major version of the Laravel Mix. Mix 4 uses Webpack 4 and comes with other nice improvements. Here’s the high-level list of new features in Mix 4 from Release v4.0.0:
- Faster compiles
- Faster npm installs.
- Upgraded to webpack 4
- Upgraded to vue-loader 15
- Upgraded to Babel 7
- Automatic vendor extraction. If you call mix.extract() with zero arguments, all vendor dependencies (* any package from node_modules/ that you pull in) will automatically be extracted. Nifty!
- CSS minification (via cssnano) options may be provided
- PostCSS plugins may be passed to mix.sass/less/stylus() on a per-call basis. This means you may provide * unique PostCSS plugins for each mix.sass() call, if desired.
- Switched JS optimizing/minification from Uglify to Terser.
- Switched from node-sass to Dart Sass. While this comes with a small increased compile-time cost, the benefit is faster and more reliable npm installs.
- Improved Babel config merging strategy. You may now override or tweak any default Babel plugins and presets provided through Mix by creating a .babelrc file in your project root.
Under the hood, Mix changes from node-sass
to dart-sass
. Support is “largely identical,” but you might notice some compile warnings when upgrading. You can manually change back by installing the node-sass
package and configuration the implementation:
mix.sass('resources/sass/app.sass', 'public/css', { implementation: require('node-sass')});
Along with the 4.0 release, Jeffrey updated the laravel/laravel repo to v4. I’d encourage you to read his PR notes to understand the need for a few extra NPM dependencies and the .default
property added to the Vue <example-component/>
that ships with Laravel out of the box:
Vue.component('example-component', require('./components/ExampleComponent.vue').default);
Specifically note that vue-loader
v13 requires .default
“…if you use the CommonJS-style require
for importing ES modules.”
Jeffrey’s explanation of the extra sass-related modules required in laravel/laravel
was helpful to help me understand his reasoning for adding them:
In the past, we included all Sass dependencies with each install of Mix, regardless of whether the user desired Sass compilation for their app. With v4, Mix now installs those dependencies on the fly – only if the user requests it with mix.sass(). However, because laravel/laravel includes Sass boilerplate, I added them here to skip the extra download step.
It’s pretty cool that Mix v4 automatically installs required dependencies on the fly based on the configuration file calling mix.sass()
.
Learn More
Make sure to check out the full v4 release notes to help you upgrade your existing Laravel projects to Mix v4. A huge thank you to Jeffrey for providing this excellent asset pipeline tool for Laravel (and other projects) to get going with all the frontend tools you love quickly!