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

推荐订阅源

V
Visual Studio Blog
罗磊的独立博客
宝玉的分享
宝玉的分享
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
V2EX
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tailwind CSS Blog
博客园_首页
量子位
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
人人都是产品经理
人人都是产品经理
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
爱范儿
爱范儿
S
SegmentFault 最新的问题
雷峰网
雷峰网
小众软件
小众软件
博客园 - 聂微东
美团技术团队
Apple Machine Learning Research
Apple Machine Learning Research
WordPress大学
WordPress大学
Jina AI
Jina AI
Hugging Face - Blog
Hugging Face - Blog

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

}