-
Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy pathvue.config.js
More file actions
133 lines (118 loc) · 3.06 KB
/
vue.config.js
File metadata and controls
133 lines (118 loc) · 3.06 KB
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
const HtmlWebpackPlugin = require('html-webpack-plugin')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const ZipPlugin = require('zip-webpack-plugin')
const path = require('path')
// Generate pages object
const pagesObj = {}
const chromeName = ['devtools-panel']
chromeName.forEach(name => {
pagesObj[name] = {
entry: `src/${name}/index.js`,
template: 'public/index.html',
filename: `${name}.html`
}
})
// 生成manifest文件
const manifest =
process.env.NODE_ENV === 'production'
? {
from: path.resolve('src/manifest.production.json'),
to: `${path.resolve('dist')}/manifest.json`
}
: {
from: path.resolve('src/manifest.development.json'),
to: `${path.resolve('dist')}/manifest.json`
}
const copyPatterns = [
{
from: path.resolve('src/devtools-panel-loader/index.js'),
to: path.resolve('dist/js/devtools-panel-loader.js')
},
{
from: path.resolve('node_modules/webextension-polyfill/dist/browser-polyfill.min.js'),
to: path.resolve('dist/browser-polyfill.js')
},
{
from: path.resolve('misc/icons'),
to: path.resolve('dist/img/icons'),
globOptions: {
ignore: ['**/.*']
}
},
manifest
]
// 开发环境将热加载文件复制到dist文件夹
if (process.env.NODE_ENV !== 'production') {
copyPatterns.push({
from: path.resolve('src/utils/hot-reload.js'),
to: path.resolve('dist')
})
}
const plugins = [
new HtmlWebpackPlugin({
// chunks: ['devtools-panel-loader'],
chunks: [],
filename: 'devtools-panel-loader.html',
template: 'src/devtools-panel-loader/index.html'
}),
new CopyWebpackPlugin({
patterns: copyPatterns
})
]
// 生产环境打包dist为zip
if (process.env.NODE_ENV === 'production') {
plugins.push(
new ZipPlugin({
path: path.resolve('dist'),
filename: 'dist.zip'
})
)
}
module.exports = {
pages: pagesObj,
// // 生产环境是否生成 sourceMap 文件
productionSourceMap: false,
configureWebpack: {
entry: {
'content': './src/content/index.js',
'background': './src/background/index.js'
},
output: {
filename: 'js/[name].js'
},
plugins
},
css: {
extract: {
filename: 'css/[name].css'
// chunkFilename: 'css/[name].css'
}
},
chainWebpack: config => {
// 处理字体文件名,去除hash值
const fontsRule = config.module.rule('fonts')
// 清除已有的所有 loader。
// 如果你不这样做,接下来的 loader 会附加在该规则现有的 loader 之后。
fontsRule.uses.clear()
fontsRule
.test(/\.(woff2?|eot|ttf|otf)(\?.*)?$/i)
.type('asset/resource')
.set('generator', {
filename: 'fonts/[name][ext]'
})
// 查看打包组件大小情况
if (process.env.npm_config_report) {
config
.plugin('webpack-bundle-analyzer')
.use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
}
},
pluginOptions: {
i18n: {
locale: 'en',
fallbackLocale: 'en',
localeDir: 'locales',
enableInSFC: false
}
}
}