-
Notifications
You must be signed in to change notification settings - Fork 0
/
vue.config.js
121 lines (111 loc) · 3.12 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
const path = require('path')
const Promise = require('bluebird')
const vConsolePlugin = require('vconsole-webpack-plugin');
module.exports = {
publicPath: '/',
outputDir: 'dist',
assetsDir: 'static',
lintOnSave: process.env.NODE_ENV === 'development',
productionSourceMap: false,
devServer: {
port: 8081,
open: false,
overlay: {
warnings: false,
errors: true,
},
historyApiFallback: true,
proxy: {
'/dd': {
ws: false,
target: 'https://oapi.dingtalk.com',
secure: false,
changeOrigin: true,
pathRewrite: {
'^/dd': ''
}
},
'/api': {
ws: false,
target: process.env.VUE_APP_BASE_API,
secure: false,
changeOrigin: true,
pathRewrite: {
'^/api': '/api'
}
},
},
before (app){
function requireUncached(module) {
try {
// 删除缓存,动态加载
delete require.cache[require.resolve(module)]
return require(module)
} catch (e) {
console.log(`can't load module in ${module}`)
}
}
// 根据 mock 请求发送响应
function sendValue(req, res, value) {
if (typeof value === 'function') {
value = value(req, res)
}
if (value.$$header) {
Object.keys(value.$$header).forEach(key => {
res.setHeader(key, value.$$header[key])
})
}
const delay = value.$$delay || 0
delete value.$$header
delete value.$$delay
Promise.delay(delay, value).then(result => {
res.send(result)
})
}
// 处理 restful mock 接口
const mockMap = require(path.join(__dirname, 'mock/mock-map'))
// 对于每个 mock 请求,require mock 文件夹下的对应路径文件,并返回响应
Object.keys(mockMap).forEach(mockPath => {
app.all(path.posix.join('/mock', mockPath), function(req, res) {
const value = requireUncached(path.join(__dirname, 'mock', mockMap[mockPath]))
sendValue(req, res, value)
})
})
app.all('/mock/*', function(req, res) {
const mockPath = path.join(__dirname, req.path)
const value = requireUncached(mockPath)
if (value) {
sendValue(req, res, value)
} else {
res.sendStatus(404)
}
})
}
},
configureWebpack: config => {
const devPlugins = [
new vConsolePlugin({
filter: [],
enable: true
})
]
// todo: 生产环境优化
// config.plugins = [...config.plugins, ...devPlugins];
// if (process.env.NODE_ENV === 'development') {
// config.plugins = [...config.plugins, ...devPlugins];
// }
},
css: {
loaderOptions: {
less: {
// 若使用 less-loader@5,请移除 lessOptions 这一级,直接配置选项。
lessOptions: {
modifyVars: {
// 或者可以通过 less 文件覆盖(文件路径为绝对路径)
hack: `true; @import '${path.join(__dirname, './src/assets/theme.less')}'`
},
},
},
},
},
}