import { Configuration as WebpackConfiguration, RuleSetRule } from 'webpack'; import { Configuration as DevServerConfiguration } from 'webpack-dev-server'; import { Options as HtmlConfiguration } from 'html-webpack-plugin'; export declare type IMode = 'development' | 'production'; export declare type ICommand = 'dev' | 'build' | 'analysis'; export interface IDefineConfigFactoryParams { mode: IMode; command: ICommand; } export declare type IDefineConfigFactory = ((params: IDefineConfigFactoryParams) => IConfig) | ((params: IDefineConfigFactoryParams) => Promise) | IConfig; export interface IScriptSrc { src: string; defer?: boolean; async?: boolean; } export interface IStyleHref { href: string; } export interface IContent { content: string; } export interface ILink { as?: string; href: string; rel?: string; } export interface ICommonConfig { /** * @description 站点标题 * @default BIXI APP */ title?: string; /** * @description 站点图标 * @default /favicon.ico */ favicon?: string; /** * @description 全局脚本 * @default [] */ scripts?: (string | IScriptSrc | IContent)[]; /** * @description 全局样式 * @default [] */ styles?: (string | IStyleHref | IContent)[]; /** * @description link 标签 * @default [] */ links?: ILink[]; /** * @description meta 标签 * @default [] */ metas?: { name: string; content: string; }[]; /** * @description entry config * @default src/index.tsx * @link https://webpack.js.org/configuration/entry-context/#entry */ entry?: WebpackConfiguration['entry']; /** * @description html plugin config * @default { 'template': 'src/index.html.ejs' } * @link https://github.com/jantimon/html-webpack-plugin */ html?: HtmlConfiguration; /** * @description global constants * @link https://webpack.js.org/plugins/define-plugin/ */ define?: { [prop: string]: string; }; /** * @description copy assets from one place to another place */ copy?: { from: string; to: string; }[]; /** * @description webpack.output */ output?: WebpackConfiguration['output']; /** * @description webpack.plugins * @link https://webpack.js.org/concepts/plugins/#root */ plugins?: WebpackConfiguration['plugins']; /** * @description webpack.module.rules * @link https://webpack.js.org/configuration/module/#modulerules */ rules?: RuleSetRule[]; /** * @description extracts CSS into separate files * @link https://github.com/webpack-contrib/mini-css-extract-plugin */ extractCss?: boolean; /** * @description replace moment with dayjs * @link https://github.com/ant-design/antd-dayjs-webpack-plugin */ replaceMomentWithDayjs?: boolean; autoInjectBuildJson?: boolean; } export declare type IServerConfig = DevServerConfiguration & ICommonConfig; export interface IBuildConfig extends ICommonConfig { sentry?: { url: string; authToken: string; org: string; project: string; release: string; }; /** * @deprecated please 'bixi analysis' instead */ analysis?: boolean; } export declare type IMergeConfig = IServerConfig & IBuildConfig; export interface IConfig extends ICommonConfig { server?: IServerConfig; build?: IBuildConfig; }