-
Notifications
You must be signed in to change notification settings - Fork 2
/
vue.config.js
160 lines (155 loc) · 4.07 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
const path = require('path')
const webpack = require('webpack')
const TerserPlugin = require('terser-webpack-plugin')// 去console插件
const CompressionWebpackPlugin = require('compression-webpack-plugin')// gzip压缩插件
const resolve = dir => path.join(__dirname, dir)
module.exports = {
// 基本路径
publicPath: process.env.NODE_ENV === 'production' ? '/trtc-calling-web/' : '/',
// 输出文件目录
outputDir: 'dist',
// 用于嵌套生成的静态资产(js,css,img,fonts)的目录
assetsDir: '',
// 指定生成的 index.html 的输出路径 (相对于 outputDir)
indexPath: 'index.html',
// 静态资源在它们的文件名中包含了 hash 以便更好的控制缓存
filenameHashing: true,
// 以多页模式构建应用程序。
pages: undefined,
// eslint-loader 是否在保存的时候检查
lintOnSave: true,
// 是否使用包含运行时编译器的Vue核心的构建。
runtimeCompiler: false,
// 默认情况下babel-loader忽略其中的所有文件node_modules。
transpileDependencies: [],
// 生产环境sourceMap
productionSourceMap: false,
// 设置生成的 HTML 中 <link rel="stylesheet"> 和 <script> 标签的 crossorigin 属性
crossorigin: undefined,
// 在生成的 HTML 中的 <link rel="stylesheet"> 和 <script> 标签上启用 Subresource Integrity (SRI)
integrity: false,
// webpack配置
configureWebpack: config => {
// config.name = name
const plugins = [
// 忽略moment locale文件
new webpack.IgnorePlugin({
resourceRegExp: /^\.\/locale$/,
contextRegExp: /moment$/
}),
// 去console
new TerserPlugin({
terserOptions: {
compress: {
drop_console: true
}
}
}),
// gzip压缩
new CompressionWebpackPlugin({
filename: '[path][base].gz',
algorithm: 'gzip',
test: new RegExp(
'\\.(' +
['js', 'css'].join('|') +
')$'
),
threshold: 10240,
minRatio: 0.8
})
]
if (process.env.NODE_ENV === 'production') {
config.plugins = [...config.plugins, ...plugins]
}
},
chainWebpack: config => {
config.resolve.alias
.set('@', resolve('src'))
// externals配置
const externals = {
// axios: 'axios'
}
config.externals(externals)
// cdn配置
const cdnUrl = 'https://cdn.jsdelivr.net/npm/'
const cdn = {
// 开发环境
dev: {
css: [],
js: [
// babel-polyfill
`${cdnUrl}babel-polyfill@6.26.0/dist/polyfill.js`
]
},
// 生产环境
build: {
css: [],
js: [
// babel-polyfill
`${cdnUrl}babel-polyfill@6.26.0/dist/polyfill.min.js`
]
}
}
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
})
},
// css相关配置
css: {
// 启用 CSS modules
requireModuleExtension: true,
// 开启 CSS source maps?
sourceMap: false,
// css预设器配置项
loaderOptions: {
less: {
lessOptions: {
modifyVars: {
// 'primary-color': '#1DA57A'
},
javascriptEnabled: true
}
}
}
},
// webpack-dev-server配置
devServer: {
open: true, // 打开浏览器
overlay: {
warnings: false,
errors: false
},
host: '0.0.0.0',
port: 8080,
https: false,
hotOnly: false,
proxy: null, // 设置代理
before: app => {}
},
// enabled by default if the machine has more than 1 cores
parallel: require('os').cpus().length > 1,
pwa: {
workboxOptions: {
skipWaiting: true,
clientsClaim: true
}
},
// 第三方插件选项
pluginOptions: {
lintStyleOnBuild: true,
stylelint:
{
fix: true,
files:
'src/**/*.{vue,htm,html,css,sss,less,scss}',
formatter:
() => {}
}
}
}