-
Notifications
You must be signed in to change notification settings - Fork 87
/
vue.config.js
132 lines (121 loc) · 3.72 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
const path = require('path')
const webpack = require('webpack')
const GitRevisionPlugin = require('git-revision-webpack-plugin')
const GitRevision = new GitRevisionPlugin()
const buildDate = JSON.stringify(new Date().toLocaleString())
const createThemeColorReplacerPlugin = require('./config/plugin.config')
function resolve (dir) {
return path.join(__dirname, dir)
}
// check Git
function getGitHash () {
try {
return GitRevision.version()
} catch (e) {}
return 'unknown'
}
const assetsCDN = {
// main.js里引入了对应的less以使 webpack-theme-color-replacer工作
// https://cdn.jsdelivr.net/npm/ant-design-vue@1.3.9/dist/antd.min.css
css: [],
js: [
'https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.min.js',
'https://cdn.jsdelivr.net/npm/axios@0.19.0/dist/axios.min.js',
'https://cdn.jsdelivr.net/npm/vue-router@3.1.2/dist/vue-router.min.js',
'https://cdn.jsdelivr.net/npm/vuex@3.1.1/dist/vuex.min.js',
'https://cdn.jsdelivr.net/npm/moment@2.24.0/moment.min.js',
'https://cdn.jsdelivr.net/npm/moment@2.24.0/locale/zh-cn.js',
'https://cdn.jsdelivr.net/npm/@antv/g2@3.5.7/dist/g2.min.js',
'https://cdn.jsdelivr.net/npm/@antv/data-set@0.10.2/dist/data-set.min.js',
'https://cdn.jsdelivr.net/npm/ant-design-vue@1.6.0/dist/antd-with-locales.js'
]
}
// webpack build externals
const prodExternals = {
// key表示包名(import foo from 'xx' 里的xx)
// value表示window下的全局变量名(库暴露出来的namespace,可查lib对应的webpack配置里的library字段)
'vue': 'Vue',
'axios': 'axios',
'vue-router': 'VueRouter',
'vuex': 'Vuex',
'moment': 'moment',
'@antv/g2': 'G2',
'@antv/data-set': 'DataSet',
'ant-design-vue': 'antd'
}
// vue.config.js
const vueConfig = {
configureWebpack: {
externals: prodExternals,
plugins: [
// Ignore all locale files of moment.js
new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
new webpack.IgnorePlugin(/moment\//),
new webpack.DefinePlugin({
APP_VERSION: `"${require('./package.json').version}"`,
GIT_HASH: JSON.stringify(getGitHash()),
BUILD_DATE: buildDate
})
]
},
chainWebpack: config => {
config.resolve.alias.set('@$', resolve('src'))
const svgRule = config.module.rule('svg')
svgRule.uses.clear()
svgRule
.oneOf('inline')
.resourceQuery(/inline/)
.use('vue-svg-icon-loader')
.loader('vue-svg-icon-loader')
.end()
.end()
.oneOf('external')
.use('file-loader')
.loader('file-loader')
.options({
name: 'assets/[name].[hash:8].[ext]'
})
// assets require on cdn
config.plugin('html').tap(args => {
args[0].cdn = assetsCDN
return args
})
},
css: {
loaderOptions: {
less: {
modifyVars: {
// less vars,customize ant design theme
// 'primary-color': '#F5222D',
// 'link-color': '#F5222D',
// 'border-radius-base': '4px'
'border-radius-base': '2px'
},
javascriptEnabled: true
}
}
},
devServer: {
// development server port 8000
port: 8000,
proxy: {
'/api': {
target: 'http://gateway.com:9527',
pathRewrite: { '^/api': '' },
ws: false,
changeOrigin: true
}
}
},
// disable source map in production
productionSourceMap: false,
lintOnSave: undefined,
// babel-loader no-ignore node_modules/*
transpileDependencies: []
}
// 如果你不想在生产环境开启换肤功能,请打开下面注释
// if (process.env.VUE_APP_PREVIEW === 'true') {
// add `ThemeColorReplacer` plugin to webpack plugins
vueConfig.configureWebpack.plugins.push(createThemeColorReplacerPlugin())
// }
module.exports = vueConfig