0%

Vueconf

#vue config 配置

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
const path = require("path");
const HotHashWebpackPlugin = require("hot-hash-webpack-plugin");
const WebpackBar = require("webpackbar");
const resolve = (dir) => path.join(__dirname, ".", dir);

module.exports = {
productionSourceMap: false,
publicPath: "./",
outputDir: "dist",
assetsDir: "assets",
devServer: {
port: 9999,
host: "0.0.0.0",
https: false,
open: true,
},

chainWebpack: (config) => {
const types = ["vue-modules", "vue", "normal-modules", "normal"];
types.forEach((type) => {
let rule = config.module.rule("less").oneOf(type);
rule
.use("style-resource")
.loader("style-resources-loader")
.options({
patterns: [path.resolve(__dirname, "./lessVariates.less")],
});
});

config.resolve.alias
.set("@", resolve("src"))
.set("api", resolve("src/apis"))
.set("common", resolve("src/common"));

config.module
.rule("images")
.use("url-loader")
.tap((options) => ({
name: "./assets/images/[name].[ext]",
quality: 85,
limit: 0,
esModule: false,
}));

config.module
.rule("svg")
.test(/.svg$/)
.include.add(resolve("src/svg"))
.end()
.use("svg-sprite-loader")
.loader("svg-sprite-loader");

config.plugin("define").tap((args) => [
{
...args,
"window.isDefine": JSON.stringify(true),
},
]);

// 生产环境配置
if (process.env.NODE_ENV === "production") {
config.output.filename("./js/[name].[chunkhash:8].js");
config.output.chunkFilename("./js/[name].[chunkhash:8].js");
config.plugin("extract-css").tap((args) => [
{
filename: "css/[name].[contenthash:8].css",
chunkFilename: "css/[name].[contenthash:8].css",
},
]);
config
.plugin("hotHash")
.use(HotHashWebpackPlugin, [{ version: "1.0.0" }]);
config.plugin("webpackBar").use(WebpackBar);

config.optimization
.minimize(true)
.minimizer("terser")
.tap((args) => {
let { terserOptions } = args[0];
terserOptions.compress.drop_console = true;
terserOptions.compress.drop_debugger = true;
return args;
});
config.optimization.splitChunks({
cacheGroups: {
common: {
name: "common",
chunks: "all",
minSize: 1,
minChunks: 2,
priority: 1,
},
vendor: {
name: "chunk-libs",
chunks: "all",
test: /[\/]node_modules[\/]/,
priority: 10,
},
},
});
}
},
};