forked from forkai/chaofun-front
-
Notifications
You must be signed in to change notification settings - Fork 0
/
vue.config.js
185 lines (174 loc) · 5.51 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
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
// vue.config.js
const path = require("path");
const webpack = require('webpack');
const resolve = dir => {
return path.join(__dirname, dir);
};
const port = process.env.port || process.env.npm_config_port || 8099
const isProduction = process.env.NODE_ENV === 'production';
// 线上打包路径,请根据项目实际线上情况
const BASE_URL = process.env.NODE_ENV === "production" ? "https://s.chao.fun/" : "/";
const fs = require('fs');
// directory to check if exists
const dirweb = './src/views/chaofun-webview';
// check if directory exists
process.env.VUE_APP_BASE_WEB = fs.existsSync(dirweb);
const Timestamp = new Date().getTime();
module.exports = {
publicPath: BASE_URL,
outputDir: "dist", // 打包生成的生产环境构建文件的目录
assetsDir: "", // 放置生成的静态资源路径,默认在outputDir
indexPath: "index.html", // 指定生成的 index.html 输入路径,默认outputDir
pages: undefined, // 构建多页
productionSourceMap: false, // 开启 生产环境的 source map
// css: config => {
// config.extract.chunkFilename = `[name].33${Timestamp}.css`;
// },
configureWebpack: config => {
config.performance = {
hints: false
}
config.output.filename = `[name].11${Timestamp}.js`;
config.output.chunkFilename = `[name].22${Timestamp}.js`;
},
chainWebpack: config => {
// 配置路径别名
config.resolve.alias
.set("@", resolve("src"))
.set("_c", resolve("src/components"));
// set svg-sprite-loader
config.module.rule('svg').exclude.add(resolve('src/icons')).end();
config.module.rule('icons').test(/\.svg$/).include.add(resolve('src/icons')).end().use('svg-sprite-loader')
.loader('svg-sprite-loader')
.options({
symbolId: 'icon-[name]'
})
.end();
config.module
.rule('vue')
.use('vue-loader')
.loader('vue-loader')
.tap(options => {
options.compilerOptions.preserveWhitespace = true
return options
})
.end()
config
// https://webpack.js.org/configuration/devtool/#development
.when(process.env.NODE_ENV === 'development',
config => config.devtool('cheap-source-map')
)
config
.when(process.env.NODE_ENV !== 'development',
config => {
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.splitChunks({
chunks: 'all',
/** 新增s */
minSize: 10000,
maxSize: 200000,
/** 新增e */
cacheGroups: {
libs: {
name: 'chunk-libs',
test: /[\\/]node_modules[\\/]/,
priority: 10,
chunks: 'initial' // only package third parties that are initially dependent
},
elementUI: {
name: 'chunk-elementUI', // split elementUI into a single package
priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
},
commons: {
name: 'chunk-commons',
test: resolve('src/components'), // can customize your rules
minChunks: 3, // minimum common number
priority: 5,
reuseExistingChunk: true
}
}
})
config.optimization.runtimeChunk('single')
}
)
/** add */
// 生产环境配置
if (isProduction) {
// 删除预加载
config.plugins.delete('preload');
config.plugins.delete('prefetch');
// 删除多余moment语言包
config.plugin("ignore")
.use(
new webpack.ContextReplacementPlugin(/moment[/\\]locale$/, /zh-cn$/)
);
// 压缩代码
config.optimization.minimize(true);
// 分割代码
config.optimization.splitChunks({
chunks: 'all',
minSize: 20000,
maxSize: 400000,
})
// 生产环境注入cdn
// config.plugin('html')
// .tap(args => {
// args[0].cdn = cdn;
// return args;
// });
}
},
css: {
extract: {
filename: `[name].33${Timestamp}.css`,
chunkFilename: `[name].33${Timestamp}.css`,
},
requireModuleExtension: true, // 启用 CSS modules
// extract: true, // 是否使用css分离插件
sourceMap: false, // 开启 CSS source maps?
// css预设器配置项
loaderOptions: {
//pass options to sass-loader
sass: {
//引入全局变量样式
// data: `@import "@/assets/common/index.sass"`
prependData: `@import "~@/styles/variables.scss";`
},
postcss: {
plugins: [
]
}
}
},
// 反向代理的配置
devServer: {
host: "0.0.0.0", // ip
port: port, // 端口
proxy: {
'/api':{
target: `https://chao.fun/api`,
changeOrigin: true,
pathRewrite: {
'^/api': ''
}
},
'/ws': {
target: `wss://chao.fun/ws`,
ws: true,
changeOrigin: true,
pathRewrite: {
'^/ws': ''
}
}
},
}
};