wah.moe/webpack.mix.js
2024-09-13 12:59:16 +01:00

114 lines
4.6 KiB
JavaScript

/*
| Mix Asset Management
|
| Mix provides a clean, fluent API for defining some Webpack build steps
| for your application.
|
| Docs: https://github.com/JeffreyWay/laravel-mix/tree/master/docs#readme
*/
let mix = require("laravel-mix");
let plugins = [];
// Customize the notifier to be less noisy
let WebpackNotifierPlugin = require('webpack-notifier');
let webpackNotifier = new WebpackNotifierPlugin({
alwaysNotify: false,
skipFirstNotification: true
})
plugins.push(webpackNotifier)
// Compress static assets in production
if (mix.inProduction()) {
let CompressionWepackPlugin = require('compression-webpack-plugin');
let gzipCompression = new CompressionWepackPlugin({
compressionOptions: { level: 9 },
test: /\.js$|\.css$|\.html$|\.svg$/
})
plugins.push(gzipCompression)
// Add additional compression plugins here.
// For example if you want to add Brotli compression:
//
// let brotliCompression = new CompressionWepackPlugin({
// compressionOptions: { level: 11 },
// filename: '[path].br[query]',
// algorithm: 'brotliCompress',
// test: /\.js$|\.css$|\.html$|\.svg$/
// })
// plugins.push(brotliCompression)
}
mix
// Set public path so manifest gets output here
.setPublicPath("public")
// JS entry file. Supports Vue, and uses Babel
//
// More info and options (like React support) here:
// https://github.com/JeffreyWay/laravel-mix/blob/master/docs/mixjs.md
.js("src/js/app.js", "js")
// SASS entry file. Uses autoprefixer automatically.
.sass("src/css/app.scss", "css")
// Customize postCSS:
// https://github.com/JeffreyWay/laravel-mix/blob/master/docs/css-preprocessors.md#postcss-plugins
.options({
// If you want to process images, change this to true and add options from
// https://github.com/tcoopman/image-webpack-loader
imgLoaderOptions: { enabled: false },
// Stops Mix from clearing the console when compilation succeeds
clearConsole: false
})
// Add assets to the manifest
.version(["public/assets"])
// Reduce noise in Webpack output
.webpackConfig({
stats: "errors-only",
plugins: plugins,
watchOptions: {
ignored: /node_modules/
}
})
// Disable default Mix notifications because we're using our own notifier
.disableNotifications()
// Full API
// Docs: https://github.com/JeffreyWay/laravel-mix/tree/master/docs#readme
//
// mix.js(src, output);
// mix.react(src, output); <-- Identical to mix.js(), but registers React Babel compilation.
// mix.preact(src, output); <-- Identical to mix.js(), but registers Preact compilation.
// mix.coffee(src, output); <-- Identical to mix.js(), but registers CoffeeScript compilation.
// mix.ts(src, output); <-- TypeScript support. Requires tsconfig.json to exist in the same folder as webpack.mix.js
// mix.extract(vendorLibs);
// mix.sass(src, output);
// mix.less(src, output);
// mix.stylus(src, output);
// mix.postCss(src, output, [require('postcss-some-plugin')()]);
// mix.browserSync('my-site.test');
// mix.combine(files, destination);
// mix.babel(files, destination); <-- Identical to mix.combine(), but also includes Babel compilation.
// mix.copy(from, to);
// mix.copyDirectory(fromDir, toDir);
// mix.minify(file);
// mix.sourceMaps(); // Enable sourcemaps
// mix.version(); // Enable versioning.
// mix.disableNotifications();
// mix.setPublicPath('path/to/public');
// mix.setResourceRoot('prefix/for/resource/locators');
// mix.autoload({}); <-- Will be passed to Webpack's ProvidePlugin.
// mix.webpackConfig({}); <-- Override webpack.config.js, without editing the file directly.
// mix.babelConfig({}); <-- Merge extra Babel configuration (plugins, etc.) with Mix's default.
// mix.then(function () {}) <-- Will be triggered each time Webpack finishes building.
// mix.when(condition, function (mix) {}) <-- Call function if condition is true.
// mix.override(function (webpackConfig) {}) <-- Will be triggered once the webpack config object has been fully generated by Mix.
// mix.dump(); <-- Dump the generated webpack config object to the console.
// mix.extend(name, handler) <-- Extend Mix's API with your own components.
// mix.options({
// extractVueStyles: false, // Extract .vue component styling to file, rather than inline.
// globalVueStyles: file, // Variables file to be imported in every component.
// processCssUrls: true, // Process/optimize relative stylesheet url()'s. Set to false, if you don't want them touched.
// purifyCss: false, // Remove unused CSS selectors.
// terser: {}, // Terser-specific options. https://github.com/webpack-contrib/terser-webpack-plugin#options
// postCss: [] // Post-CSS options: https://github.com/postcss/postcss/blob/master/docs/plugins.md
// });