// https://umijs.org/config/ import CompressionWebpackPlugin from 'compression-webpack-plugin' const prodGzipList = ['js', 'css', 'html'] import { defineConfig } from 'umi' import defaultSettings from './defaultSettings' import proxy from './proxy' import routes from './routes' const { REACT_APP_ENV } = process.env export default defineConfig({ hash: true, antd: {}, define: { REACT_APP_ENV: REACT_APP_ENV || false }, layout: { // https://umijs.org/zh-CN/plugins/plugin-layout locale: true, siderWidth: 208, ...defaultSettings }, dva: { hmr: true, disableModelsReExport: true, lazyLoad: true }, history: { type: 'browser' }, locale: { // default zh-CN default: 'zh-CN', antd: false, // default true, when it is true, will use `navigator.language` overwrite default baseNavigator: false }, dynamicImport: { loading: '@/components/PageLoading/index' }, targets: { ie: 11 }, externals: { react: 'React', 'react-dom': 'ReactDOM' }, scripts: process.env.NODE_ENV === 'development' ? [ 'https://d2.smartcost.com.cn/cach/cld/react.development.js', 'https://d2.smartcost.com.cn/cach/cld/react-dom.development.js' ] : [ 'https://d2.smartcost.com.cn/cach/cld/react.production.min.js', 'https://d2.smartcost.com.cn/cach/cld/react-dom.production.min.js' ], routes, theme: { 'primary-color': defaultSettings.primaryColor }, title: false, ignoreMomentLocale: true, proxy: proxy[REACT_APP_ENV || 'dev'], manifest: { basePath: '/' }, exportStatic: {}, esbuild: {}, fastRefresh: {}, nodeModulesTransform: { type: 'none' // 提升编译速度加速,加速 }, extraBabelPlugins: [ '@babel/plugin-proposal-nullish-coalescing-operator', '@babel/plugin-proposal-optional-chaining', [ 'import', { libraryName: '@icon-park/react', libraryDirectory: 'es/icons', camel2DashComponentName: false }, '@icon-park/react' ], [ 'import', { libraryName: 'antd', libraryDirectory: 'es', style: 'css' } ] ], chainWebpack(config, { env }) { config.plugin('windicss').use('windicss-webpack-plugin') config.plugin('moment2dayjs').use('antd-dayjs-webpack-plugin') if (env === 'production') { config.merge({ optimization: { minimize: true, splitChunks: { chunks: 'all', minSize: 30000, minChunks: 2, automaticNameDelimiter: '.', cacheGroups: { vendor: { name: 'vendors', test: ({ resource }) => /^.(?=react).$/.test(resource), chunks: 'all', priority: 20 } } } } }) config.plugin('compression-webpack-plugin').use( new CompressionWebpackPlugin({ // filename: 文件名称,这里我们不设置,让它保持和未压缩的文件同一个名称 algorithm: 'gzip', // 指定生成gzip格式 test: new RegExp('\\.(' + prodGzipList.join('|') + ')$'), // 匹配哪些格式文件需要压缩 threshold: 5000, //对超过10k的数据进行压缩 minRatio: 0.6 // 压缩比例,值为0 ~ 1 }) ) } //过滤掉momnet的那些不使用的国际化文件 // config // .plugin('replace') // .use(require('webpack').ContextReplacementPlugin) // .tap(() => { // return [/moment[/\\]locale$/, /zh-cn/] // }) } })