-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwebpack.config.ts
128 lines (107 loc) · 3.56 KB
/
webpack.config.ts
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
import ArchiveWebpackPlugin from "archive-webpack-plugin"
import CrxPackWebpackPlugin from "crx-pack-webpack-plugin"
import GenerateIconWebpackPlugin from "generate-icon-webpack-plugin"
import path from "path"
import { Configuration } from "webpack"
import { merge } from "webpack-merge"
import WebpackBar from "webpackbar"
import baseConfig from "./config/webpack.base"
import devConfig from "./config/webpack.dev"
import prodConfig from "./config/webpack.prod"
const mergeConfig: (env: any, argv: any) => Configuration = (env: any, argv: any): Configuration => {
// serve模式(watch)
if (env.WEBPACK_WATCH) {
const packageDir: string = "serve"
const watchConfig: Configuration = {
plugins: [
new WebpackBar({
name: "webpack Watch",
basic: true,
reporters: ["basic"],
}),
new GenerateIconWebpackPlugin({
logo: path.resolve(__dirname, "./public/icon.png"),
dir: "icons",
size: [128, 64, 48, 32, 16],
log: false,
grayscale: true,
}),
],
}
const devMergedConfig: Configuration = merge(watchConfig, baseConfig(packageDir), devConfig)
return devMergedConfig
}
// dev模式
if (argv.mode === "development") {
const packageDir: string = "dev"
const optionConfig: Configuration = {
plugins: [
new WebpackBar({
name: "webpack Development",
color: "#76c5f7",
basic: true,
fancy: true,
profile: true,
reporters: ["fancy", "profile"],
}),
new GenerateIconWebpackPlugin({
logo: path.resolve(__dirname, "./public/icon.png"),
dir: "icons",
size: [128, 64, 48, 32, 16],
log: true,
grayscale: true,
}),
],
}
const devMergedConfig: Configuration = merge(optionConfig, baseConfig(packageDir), devConfig)
return devMergedConfig
}
// build模式
if (argv.mode === "production") {
const packageDir: string = "bilibili-bangumi"
const optionConfig: Configuration = {
plugins: [
new GenerateIconWebpackPlugin({
logo: path.resolve(__dirname, "./public/icon.png"),
dir: "icons",
size: [128, 64, 48, 32, 16],
log: true,
grayscale: false,
}),
],
}
const optionMergedConfig: Configuration = merge(optionConfig, baseConfig(packageDir))
if (env.package) {
const packageConfig: Configuration = {
plugins: [
new CrxPackWebpackPlugin({
zip: true,
xml: true,
keyFile: path.resolve(__dirname, "./bilibili-bangumi.pem"),
contentPath: path.resolve(__dirname, "./build/", packageDir),
outputPath: path.resolve(__dirname, "./release"),
name: packageDir,
}),
],
}
const prodMergedConfig: Configuration = merge(optionMergedConfig, packageConfig, prodConfig)
return prodMergedConfig
}
if (env.zip) {
const zipConfig: Configuration = {
plugins: [
new ArchiveWebpackPlugin({
source: path.resolve(__dirname, "./build/", packageDir),
destination: path.resolve(__dirname, `./release/${packageDir}.zip`),
format: "zip",
}),
],
}
const prodMergedConfig: Configuration = merge(optionMergedConfig, zipConfig, prodConfig)
return prodMergedConfig
}
const prodMergedConfig: Configuration = merge(optionConfig, baseConfig(packageDir), prodConfig)
return prodMergedConfig
}
}
export default mergeConfig