-
Notifications
You must be signed in to change notification settings - Fork 1.5k
/
vue.config.js
164 lines (154 loc) · 5 KB
/
vue.config.js
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
const TerserPlugin = require('terser-webpack-plugin') // 用于在生成环境剔除debuger和console
const CompressionPlugin = require("compression-webpack-plugin"); // gzip压缩,优化http请求,提高加载速度
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin // 代码分析工具
const path = require('path');
const resolve = dir => {
return path.join(__dirname, dir);
};
const env = process.env.NODE_ENV
let target = process.env.VUE_APP_URL // development和production环境是不同的
const cdn = {
// 开发环境
dev: {
css: [],
js: [
]
},
// 生产环境
build: {
css: [
'https://cdn.bootcss.com/element-ui/2.11.1/theme-chalk/index.css',
'https://cdn.bootcss.com/nprogress/0.2.0/nprogress.min.css'
],
js: [
'https://cdn.bootcss.com/vue/2.6.10/vue.min.js',
'https://cdn.bootcss.com/vue-router/3.1.2/vue-router.min.js',
'https://cdn.bootcss.com/vuex/2.3.1/vuex.min.js',
'https://cdn.bootcss.com/axios/0.19.0/axios.min.js',
'https://cdn.bootcss.com/vue-i18n/8.13.0/vue-i18n.min.js',
'https://cdn.bootcss.com/element-ui/2.11.1/index.js',
'https://cdn.bootcss.com/echarts/3.8.5/echarts.min.js',
'https://cdn.bootcss.com/Mock.js/1.0.1-beta3/mock-min.js',
'https://cdn.bootcss.com/nprogress/0.2.0/nprogress.min.js',
'https://cdn.bootcss.com/js-cookie/2.2.0/js.cookie.min.js'
]
}
}
module.exports = {
publicPath: process.env.NODE_ENV === "production" ? "/permission/" : "/",
outputDir: './dist',
assetsDir:'static',
filenameHashing:true, // false 来关闭文件名哈希
lintOnSave: false, // 关闭eslint
// 打包时不生成.map文件
productionSourceMap: false,
devServer: {
open: true,
host: '0.0.0.0',
port: 8808
// 由于本项目数据通过easy-mock和mockjs模拟,不存在跨域问题,无需配置代理;
// proxy: {
// '/v2': {
// target: target,
// changeOrigin: true
// }
// }
},
// webpack相关配置
chainWebpack: (config) => {
config.entry.app = ['./src/main.js']
config.resolve.alias
.set('@', resolve('src'))
.set('cps', resolve('src/components'))
// 关闭npm run build之后,This can impact web performance 警告
config.performance
.set('hints', false)
// 移除 prefetch 插件
config.plugins.delete("prefetch");
// 移除 preload 插件
config.plugins.delete('preload');
// 压缩代码
config.optimization.minimize(true);
// 分割代码
config.optimization.splitChunks({
chunks: 'all'
})
// 对图片进行压缩处理
config.module
.rule('images')
.use('image-webpack-loader')
.loader('image-webpack-loader')
.options({
disable: true, // [email protected] and newer
quality: '65-80',
speed: 4
})
.end()
// 项目文件大小分析
config.plugin('webpack-bundle-analyzer')
.use(new BundleAnalyzerPlugin({
openAnalyzer: false, // 是否打开默认浏览器
analyzerPort:8777
}))
// 对vue-cli内部的 webpack 配置进行更细粒度的修改。
// 添加CDN参数到htmlWebpackPlugin配置中, 详见public/index.html 修改
config
.plugin('html')
.tap(args => {
if (process.env.NODE_ENV === 'production') {
args[0].cdn = cdn.build
}
if (process.env.NODE_ENV === 'development') {
args[0].cdn = cdn.dev
}
return args
})
},
configureWebpack:config => {
// 为生产环境修改配置...
if (process.env.NODE_ENV === 'production') {
// 忽略生产环境打包的文件
config.externals = {
"vue": "Vue",
"vue-router": "VueRouter",
"vuex": "Vuex",
"vue-i18n": "VueI18n",
"axios": "axios",
'element-ui': 'ELEMENT',
'echarts':'echarts',
'mockjs':'Mock',
'nprogress':'NProgress',
'js-cookie':'Cookies'
}
// 去除console来减少文件大小,效果同'UglifyJsPlugin'
new TerserPlugin({
cache: true,
parallel: true,
sourceMap: true, // Must be set to true if using source-maps in production
terserOptions: {
compress: {
warnings: false,
drop_console: true,
drop_debugger: true,
pure_funcs: ['console.log']
}
}
})
// 开启gzip压缩
config.plugins.push(new CompressionPlugin({
algorithm: 'gzip',
test: new RegExp("\\.(" + ["js", "css"].join("|") + ")$"), // 匹配文件扩展名
// threshold: 10240, // 对超过10k的数据进行压缩
threshold: 5120, // 对超过5k的数据进行压缩
minRatio: 0.8,
cache: true, // 是否需要缓存
deleteOriginalAssets:false // true删除源文件(不建议);false不删除源文件
}))
} else {
// 为开发环境修改配置...
}
},
// 第三方插件配置
pluginOptions: {
}
}