In some scenarios, you may need to execute a piece of logic before your compilation begins. Perhaps you need to copy a directory or move a file. The mix.before()
function allows for this.
mix.before(() => {
console.log('I will be logged before the compilation begins.');
});
If the logic you're executing is asynchronous, be sure to return a Promise
from your callback function, like so:
mix.before(stats => {
return new Promise(
resolve => setTimeout(resolve, 2000)
);
});
Mix will not begin its compilation until all before
hooks have fully resolved. As such, for this example the compilation would begin after two seconds.
If, on the other hand, you need to execute a piece of logic after webpack has completed its compilation, reach for the mix.after()
method - or its alias, mix.then()
.
mix.js('src/app.js', 'dist')
.after(stats => {
// webpack compilation has completed
});
This callback function will be passed a webpack Stats
object. As an example, let's log a list of all compiled assets.
mix.js('resources/assets/js/app.js', 'public/js').then(stats => {
console.log(Object.keys(stats.compilation.assets));
});
The official documentation for the Stats
object may be found here.