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

推荐订阅源

L
LangChain Blog
博客园_首页
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
S
SegmentFault 最新的问题
量子位
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 司徒正美
博客园 - Franky
Google DeepMind News
Google DeepMind News
Recent Announcements
Recent Announcements
B
Blog RSS Feed
C
Check Point Blog
The Cloudflare Blog
M
MIT News - Artificial intelligence
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
F
Fortinet All Blogs
Hugging Face - Blog
Hugging Face - Blog
博客园 - 叶小钗
V
Visual Studio Blog
V
V2EX
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 聂微东
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

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,
}

}