惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
V
Visual Studio Blog
J
Java Code Geeks
Engineering at Meta
Engineering at Meta
爱范儿
爱范儿
Vercel News
Vercel News
博客园 - 聂微东
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
W
WeLiveSecurity
B
Blog RSS Feed
P
Privacy International News Feed
Latest news
Latest news
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Hacker News
The Hacker News
人人都是产品经理
人人都是产品经理
D
Docker
Blog — PlanetScale
Blog — PlanetScale
C
Cisco Blogs
T
Threatpost
aimingoo的专栏
aimingoo的专栏
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Blog of Author Tim Ferriss
P
Proofpoint News Feed
有赞技术团队
有赞技术团队
L
Lohrmann on Cybersecurity
F
Full Disclosure
H
Help Net Security
Microsoft Azure Blog
Microsoft Azure Blog
Stack Overflow Blog
Stack Overflow Blog
月光博客
月光博客
博客园 - 【当耐特】
T
Threat Research - Cisco Blogs
Security Latest
Security Latest
雷峰网
雷峰网
T
Tor Project blog
Cisco Talos Blog
Cisco Talos Blog
Spread Privacy
Spread Privacy
K
Kaspersky official blog
I
Intezer
The Register - Security
The Register - Security
宝玉的分享
宝玉的分享
P
Proofpoint News Feed
P
Privacy & Cybersecurity Law Blog
Simon Willison's Weblog
Simon Willison's Weblog
腾讯CDC
U
Unit 42
T
Tenable Blog
IT之家
IT之家
NISL@THU
NISL@THU

Coding Your Life

lib库开发的一款PDF处理小工具 | Coding Your Life mirror-cli | Coding Your Life 最长递增子序列算法 | Coding Your Life webpack5 模块联邦技术 | Coding Your Life canvas实现代码雨效果 | Coding Your Life 使用MessageChannel模拟React优先级执行队列 | Coding Your Life vue3 和 react 虚拟dom | Coding Your Life ES6中Reflect对象与Proxy结合实现代理和响应式编程 | Coding Your Life 前端技术分享MediaRecord实现运动相机 | Coding Your Life react基础概念 | Coding Your Life 微信小程序使用canvas创建像素头像 | Coding Your Life 前端基础概念 | Coding Your Life 中高级前端须注意的40条移动端H5坑位指南 | Coding Your Life native-code-push 热更新配置 | Coding Your Life Git 常用命令速查表 | Coding Your Life push-server 热更新常用命令速查表 | Coding Your Life 高效的js片段 | Coding Your Life
webpack基础配置详解 | Coding Your Life
Sir_Liu · 2025-05-26 · via Coding Your Life

webpack是一个模块打包工具,其最新版本是webpack5,它可以将多个模块进行打包,并生成一个或多个静态资源文件。webpack的配置文件为webpack.config.js,该文件包含webpack的配置信息,如入口文件、输出文件、模块加载规则、插件等。下面我们将以一个简单的webpack配置文件为例,对webpack配置项进行介绍。

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




const path = require('path');


const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');


const pages = [
{
name: 'home',
entry: './src/pages/home/index.js',
template: './src/pages/home/index.html',
title: '首页',
chunks: ['home', 'vendor', 'common']
},
{
name: 'about',
entry: './src/pages/about/index.js',
template: './src/pages/about/index.html',
title: '关于我们',
chunks: ['about', 'vendor', 'common']
},
{
name: 'contact',
entry: './src/pages/contact/index.js',
template: './src/pages/contact/index.html',
title: '联系我们',
chunks: ['contact', 'vendor', 'common']
}
]

module.exports = {
mode: 'development',
entry: pages.reduce((acc, page) => {
acc[page.name] = page.entry;
return acc;
}, {}),
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'js/[name].[contenthash].js',
clean: true
},



externals: {
'react': 'React',
},
optimization: {
splitChunks: {


chunks: 'all',
minSize: 30000,
maxSize: 0,
minChunks: 1,
maxAsyncRequests: 30,
maxInitialRequests: 30,
automaticNameDelimiter: '~',
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/]/,
name: 'vendor',
priority: -10,
},
common: {
test: /[\\/]src[\\/]components[\\/]/,
name: 'common',
minChunks: 2,
},

default: {
reuseExistingChunk: true,
}
}
}
},
module: {
rules: [
{
test: /\.ts?$/,
exclude: /node_modules/,
use: 'ts-loader'
},
{
test: /\.css$/,
use: [MiniCssExtractPlugin.loader, 'css-loader']
},

]
},
plugins: [
new MiniCssExtractPlugin({
filename: 'css/[name].[conntenthash].css'
}),

...pages.map(page => new HtmlWebpackPlugin({
template: path.resolve(__dirname, page.template),
filename: `${page.filename}.html`,


chunks: page.chunks,
title: page.title,
inject: 'body',
scriptLoading: 'defer',
env: {
APP_ENV: process.env.APP_ENV,
},
minify: {
removeComments: true,
collapseWhitespace: true,
removeRedundantAttributes: true,
minifyCSS: true,
minifyJS: true,
}
}))
],
devServer: {
contentBase: path.join(__dirname, 'dist'),
compress: true,
port: 9000,
hot: true,
open: true,
}

}