1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
| var path = require('path')
| module.exports = {
| publicPath: '/',
| assetsDir: 'static',
| productionSourceMap: false, // 关闭sourceMap,减少产物体积
|
| // 强制抽离 CSS 为独立文件,不内联进 JS
| css: {
| extract: true
| },
|
| configureWebpack: {
| // ========== 只外置:ElementUI / ViewUI / ECharts,必须外置 vue ==========
| externals: {
| 'vue': 'Vue',
| 'element-ui': 'ELEMENT',
| 'view-design': 'ViewUI',
| 'echarts': 'echarts'
| },
| // =======================================================
|
| optimization: {
| minimizer: [
| new (require('terser-webpack-plugin'))({
| terserOptions: {
| compress: {
| drop_console: true, // 移除console
| drop_debugger: true, // 移除debugger
| pure_funcs: ['console.log', 'console.info', 'console.warn']
| },
| mangle: {
| safari10: true
| },
| output: {
| comments: false // 移除所有注释
| }
| },
| extractComments: false,
| parallel: true // 多进程压缩
| })
| ],
|
| runtimeChunk: 'single',
|
| splitChunks: {
| chunks: 'all',
| minSize: 10 * 1024, // 20kb → 10kb,拆分更充分
| minChunks: 2,
| maxAsyncRequests: 30,
| maxInitialRequests: 30,
| name: false,
|
| cacheGroups: {
| common: {
| name: 'common',
| chunks: 'all',
| minChunks: 2,
| priority: 5,
| reuseExistingChunk: true
| },
| vendor: {
| test: /[\\/]node_modules[\\/]/,
| name: 'vendor',
| chunks: 'all',
| priority: 10,
| reuseExistingChunk: true
| }
| }
| }
| },
| resolve: {
| alias: {
| '@': path.join(__dirname, 'src')
| }
| }
| },
|
| // 图片优化 + 关闭预加载冗余
| chainWebpack(config) {
| config.module
| .rule('images')
| .use('url-loader')
| .loader('url-loader')
| .tap(options => {
| options.limit = 4 * 1024
| return options
| })
| config.plugins.delete('prefetch')
| config.plugins.delete('preload')
| },
|
| devServer: {
| sockHost: 'localhost',
| port: 8082,
| disableHostCheck: true,
| proxy: {
| '/': {
| target: 'http://183.196.93.178:8089',
| // target: 'http://192.168.0.147:8089',
| changeOrigin: true,
| pathRewrite: {
| '/': ''
| }
| }
| }
| }
| }
|
|