laravel-mix
Version:
The power of webpack, distilled for the rest of us.
182 lines (152 loc) • 5.06 kB
TypeScript
// Type definitions for laravel-mix 6.0
import * as webpack from 'webpack';
import { Options as AutoprefixerConfig } from 'autoprefixer';
import { Options as CleanCssConfig } from 'clean-css';
// import { CssNanoOptions as CssNanoConfig } from 'cssnano';
import { CssNanoOptions as CssNanoConfig } from './cssnano';
import { Options as GifsicleConfig } from 'imagemin-gifsicle';
import { Options as MozjpegConfig } from 'imagemin-mozjpeg';
import { Options as OptipngConfig } from 'imagemin-optipng';
import { Options as SvgoConfig } from 'imagemin-svgo';
import { TransformOptions as BabelConfig } from '@babel/core';
// import { TerserPluginOptions } from 'terser-webpack-plugin';
import { TerserPluginOptions } from './terser';
import { AcceptedPlugin } from 'postcss';
interface MixConfig {
/** Determine if webpack should be triggered in a production environment. */
production?: boolean;
/** Determine if we should enable hot reloading. */
hmr?: boolean;
/** Hostname and port used for the hot reload module */
hmrOptions?: {
host: string;
port: string;
};
/** Determine if we should enable https on hot reloading. */
https?: boolean;
/**
* PostCSS plugins to be applied to compiled CSS.
*
* See: https://github.com/postcss/postcss/blob/master/docs/plugins.md
**/
postCss?: AcceptedPlugin[];
/**
* Determine if we should enable autoprefixer by default.
* May be set to false to disable it.
**/
autoprefixer?: false | AutoprefixerConfig;
/** The public path for the build. */
publicPath?: string;
/**
* The name / path to the mix manifest.
* The path is relative to the public path.
*
* Set to `false` to disable manifest generation.
**/
manifest?: string | false;
/**
* The path for the runtime chunk (`manifest.js`).
*
* Defaults to being placed next to compiled JS files.
**/
runtimeChunkPath?: string | null;
/** Determine if error notifications should be displayed for each build. */
notifications?: {
onSuccess?: boolean;
onFailure?: boolean;
};
/**
* Determine if sourcemaps should be created for the build.
*
* @deprecated Please use mix.sourceMaps() instead
**/
sourcemaps?: false | string;
/** The resource root for the build. */
resourceRoot?: string;
/**
* Image Loader defaults.
* See: https://github.com/thetalecrafter/img-loader#options
**/
imgLoaderOptions?: {
enabled?: boolean;
gifsicle?: GifsicleConfig;
mozjpeg?: MozjpegConfig;
optipng?: OptipngConfig;
svgo?: SvgoConfig;
};
/**
* File Loader directory defaults.
*
* @deprecated Use `assetModules: true` and `assetDirs` instead
**/
fileLoaderDirs?: {
images?: string;
fonts?: string;
};
/** Asset directory defaults. */
assetDirs?: {
images?: string;
fonts?: string;
};
/** Use Webpack asset modules instead of File Loader. */
assetModules?: boolean;
/**
* Determine if CSS relative url()s should be resolved by webpack.
* Disabling this can improve performance greatly.
**/
processCssUrls?: boolean;
/**
* Terser-specific settings for Webpack.
*
* See: https://github.com/webpack-contrib/terser-webpack-plugin#options
**/
terser?: TerserPluginOptions;
/**
* Sets the css module identifier pattern
*
* For more information see https://github.com/webpack-contrib/css-loader/tree/v5.2.7#localidentname
*/
cssModuleIdentifier?: string;
/**
* cssnano-specific settings for Webpack.
* Disabled if set to false.
*
* See: https://cssnano.co/optimisations/
**/
cssNano?: false | CssNanoConfig;
/**
* CleanCss-specific settings for Webpack.
*
* See: https://github.com/jakubpawlowicz/clean-css#constructor-options
**/
cleanCss?: CleanCssConfig;
/**
* Custom Webpack-specific configuration to merge/override Mix's.
*
* @see mix.webpackConfig()
**/
webpackConfig?: webpack.Configuration;
/** Custom Babel configuration to be merged with Mix's defaults. */
babelConfig?: BabelConfig;
/**
* Determine if Mix should ask the friendly errors plugin to
* clear the console before outputting the results or not.
*
* https://github.com/geowarin/friendly-errors-webpack-plugin#options
**/
clearConsole?: boolean;
/**
* Enable legacy node -> browser polyfills for things like `process` and `Buffer`.
*/
legacyNodePolyfills?: boolean;
/**
* Options to pass to vue-loader
*
* @deprecated Use `.vue({options: {…}})` instead
**/
vue?: any;
/** The default Babel configuration. */
babel?: (babelRcPath?: string) => BabelConfig;
/** Merge the given options with the current defaults. */
merge?: (options: MixConfig) => void;
}