-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathvue.config.js
141 lines (134 loc) · 4.2 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
const path = require('path');
const DEV_PORT = 8082;
const resolve = (dir) => {
return path.join(__dirname, dir);
};
process.env.VUE_APP_TITLE = require('./package.json').description;
// 项目部署基础
// 默认情况下,我们假设你的应用将被部署在域的根目录下,
// 例如:https://www.my-app.com/
// 默认:'/'
// 如果您的应用程序部署在子路径中,则需要在这指定子路径
// 例如:https://www.my-app.com/my-app/
// 需要将它改为'/my-app/'
// process.env.NODE_ENV === 'development' ? '/'
const BASE_URL = '/';
module.exports = {
publicPath: BASE_URL,
outputDir: 'mobile', // 打包名称
// 打包时不生成.map文件
productionSourceMap: false,
// 如果你不需要使用eslint,把lintOnSave设为false即可
lintOnSave: process.env.NODE_ENV === 'development',
// 这里写你调用接口的基础路径,来解决跨域,如果设置了代理,那你本地开发环境的axios的baseUrl要写为 '' ,即空字符串
devServer: {
host: '0.0.0.0',
port: DEV_PORT,
// 自动打开浏览器
open: true,
proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy
'http': {
target: process.env.VUE_APP_BASE_API,
changeOrigin: true
// pathRewrite: {
// ['^' + process.env.VUE_APP_BASE_API]: ''
// }
},
'lock': {
target: process.env.VUE_APP_BASE_LOCK_API,
changeOrigin: true,
ws: true,
pathRewrite: {
'^/lock': ''
}
}
},
disableHostCheck: true
},
pluginOptions: {
'style-resources-loader': {
preProcessor: 'less',
patterns: [path.resolve(__dirname, './src/styles/varibles.less')]
}
},
configureWebpack: {
resolve: {
alias: {
'@': resolve('src')
}
}
},
chainWebpack(config) {
config.resolve.symlinks(true);
// set svg-sprite-loader
config.module
.rule('svg')
.exclude.add(resolve('src/assets/icons'))
.end();
config.module
.rule('icons')
.test(/\.svg$/)
.include.add(resolve('src/assets/icons'))
.end()
.use('svg-sprite-loader')
.loader('svg-sprite-loader')
.options({
symbolId: 'icon-[name]'
})
.end();
config.plugin('preload').tap(() => [
{
rel: 'preload',
// to ignore runtime.js
fileBlacklist: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/],
include: 'initial'
}
]);
config.when(process.env.NODE_ENV !== 'development', () => {
config
.plugin('ScriptExtHtmlWebpackPlugin')
.after('html')
.use('script-ext-html-webpack-plugin', [
{
// `runtime` must same as runtimeChunk name. default is `runtime`
inline: /runtime\..*\.js$/
}
])
.end();
// config.optimization.minimizer('terser').tap((options) => {
// options[0].terserOptions.compress.drop_console = true;
// options[0].terserOptions.compress.drop_debugger = true;
// return options;
// });
config.optimization.splitChunks({
chunks: 'all',
cacheGroups: {
libs: {
name: 'chunk-libs',
test: /[\\/]node_modules[\\/]/,
// eslint-disable-next-line no-magic-numbers
priority: 10,
chunks: 'initial' // only package third parties that are initially dependent
},
elementUI: {
name: 'chunk-vant', // split vant into a single package
// eslint-disable-next-line no-magic-numbers
priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
test: /[\\/]node_modules[\\/]_?vant(.*)/ // in order to adapt to cnpm
},
commons: {
name: 'chunk-commons',
test: resolve('src/components'), // can customize your rules
// eslint-disable-next-line no-magic-numbers
minChunks: 3, // minimum common number
// eslint-disable-next-line no-magic-numbers
priority: 5,
reuseExistingChunk: true
}
}
});
config.optimization.runtimeChunk('single');
});
}
};