Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
檀越@新空间
Coding Tree
提交
e1221dde
C
Coding Tree
项目概览
檀越@新空间
/
Coding Tree
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
Coding Tree
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
e1221dde
编写于
5月 20, 2022
作者:
彭世瑜
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix
上级
5d460aae
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
306 addition
and
2 deletion
+306
-2
blog/webpack/index.md
blog/webpack/index.md
+306
-2
未找到文件。
blog/webpack/index.md
浏览文件 @
e1221dde
...
@@ -1178,7 +1178,44 @@ package.json
...
@@ -1178,7 +1178,44 @@ package.json
}
}
```
```
完整配置
webpack4
```
js
// webpack配置
module
.
exports
=
{
// loader配置
module
:
{
rules
:
[
// 处理css文件
{
test
:
/
\.
css$/i
,
use
:
[
// 创建style标签,将样式放入style标签中
// "style-loader",
// 提取js中的css成单独文件
MiniCssExtractPlugin
.
loader
,
// 将css文件整合到js文件中
"
css-loader
"
,
// 需要配置 browserlist,配合NODE_ENV使用
{
loader
:
"
postcss-loader
"
,
options
:
{
ident
:
'
postcss
'
,
plugins
:
()
=>
[
require
(
'
postcss-preset-env
'
)()
]
},
},
},
],
},
],
},
};
```
webpack5完整配置
```
js
```
js
// webpack.config.js
// webpack.config.js
...
@@ -1634,7 +1671,274 @@ module.exports = {
...
@@ -1634,7 +1671,274 @@ module.exports = {
```
```
### 5.6、压缩html和js
```
js
// 生产环境下会自动压缩js代码
mode
:
'
production
'
// 生产环境默认压缩html
new
HtmlWebpackPlugin
({
template
:
"
./src/index.html
"
,
minify
:
{
// 移除空格
collapseWhitespace
:
true
,
// 移除注释
removeComments
:
true
,
}
}),
```
webpack5压缩js
```
bash
$
npm
install
terser-webpack-plugin
--save-dev
```
```
js
const
TerserPlugin
=
require
(
"
terser-webpack-plugin
"
);
module
.
exports
=
{
optimization
:
{
minimize
:
true
,
minimizer
:
[
// 使用 terser 优化和压缩 JS
new
TerserPlugin
()
],
},
};
```
### 5.7、webpack生产环境
需要处理的资源
-
css/less 兼容性处理 单文件提取 压缩优化
-
js 兼容性处理 压缩优化
-
html 压缩优化
-
图片
-
字体
正常来讲,一个文件只能被一个loader处理
当一个文件要被多个loader处理,一定要指定loader执行的先后顺序
```
js
// 优先执行
enforce
:
'
pre
'
```
完整配置
```
js
// webpack.config.js
const
path
=
require
(
"
path
"
);
const
HtmlWebpackPlugin
=
require
(
"
html-webpack-plugin
"
);
const
MiniCssExtractPlugin
=
require
(
"
mini-css-extract-plugin
"
);
const
CssMinimizerPlugin
=
require
(
"
css-minimizer-webpack-plugin
"
);
const
TerserPlugin
=
require
(
"
terser-webpack-plugin
"
);
const
ESLintPlugin
=
require
(
"
eslint-webpack-plugin
"
);
// css 公共loader
const
commonCssLoaders
=
[
// "style-loader",
MiniCssExtractPlugin
.
loader
,
"
css-loader
"
,
{
loader
:
"
postcss-loader
"
,
options
:
{
postcssOptions
:
{
plugins
:
[
[
// 配合package.json browserlist使用
"
postcss-preset-env
"
,
],
],
},
},
},
];
// webpack配置
module
.
exports
=
{
// 入口文件
entry
:
"
./src/index.js
"
,
// 输出
output
:
{
filename
:
"
[name].js
"
,
path
:
path
.
resolve
(
__dirname
,
"
dist
"
),
// 自定义资源文件名
assetModuleFilename
:
"
images/[hash:10][ext][query]
"
,
// 在生成文件之前清空 output 目录
clean
:
true
,
},
// 开发服务器配置
devServer
:
{
// 从目录提供静态文件
static
:
{
directory
:
path
.
join
(
__dirname
,
"
public
"
),
publicPath
:
"
/
"
,
},
// 启动后打开浏览器
open
:
true
,
// 监听请求的端口号
port
:
8080
,
},
// loader配置
module
:
{
rules
:
[
// 处理css文件
{
test
:
/
\.
css$/i
,
use
:
commonCssLoaders
,
},
// 处理less文件
{
test
:
/
\.
less$/i
,
use
:
[...
commonCssLoaders
,
"
less-loader
"
],
},
// 处理资源文件
{
test
:
/
\.(
png|svg|jpg|jpeg|gif
)
$/i
,
type
:
"
asset
"
,
},
// 处理html文件,加载其中的图片
{
test
:
/
\.
html$/i
,
loader
:
"
html-loader
"
,
},
// 处理字体文件
{
test
:
/
\.(
woff|woff2|eot|ttf|otf
)
$/i
,
type
:
"
asset/resource
"
,
},
// js兼容性处理
{
test
:
/
\.
js$/
,
exclude
:
/node_modules/
,
use
:
{
loader
:
"
babel-loader
"
,
options
:
{
// 预设,提示babel怎么样做兼容性处理
// 基本的兼容性处理,
presets
:
[
[
"
@babel/preset-env
"
,
{
// 按需加载
useBuiltIns
:
"
usage
"
,
// 指定core-js版本
corejs
:
{
version
:
3
,
},
// 指定兼容性到哪个版本浏览器
targets
:
{
chrome
:
"
60
"
,
firefox
:
"
60
"
,
ie
:
"
9
"
,
safari
:
"
10
"
,
edge
:
"
17
"
,
},
},
],
],
},
},
},
],
},
// 插件配置
plugins
:
[
// 复制一份HTML文件,并自动引入打包资源(js/css)
new
HtmlWebpackPlugin
({
template
:
"
./src/index.html
"
,
}),
// 提取css文件
new
MiniCssExtractPlugin
({
filename
:
"
[name].css
"
,
}),
// 使用eslint对代码检查
// package.json eslintConfig airbnb
new
ESLintPlugin
({
fix
:
true
,
}),
],
optimization
:
{
// 开发环境下启用 CSS 优化
minimize
:
true
,
minimizer
:
[
// 使用 cssnano 优化和压缩 CSS
new
CssMinimizerPlugin
(),
// 使用 terser 优化和压缩 JS
new
TerserPlugin
(),
],
},
// 模式
// mode: "development",
mode
:
"
production
"
,
};
```
package.json
```
json
{
"scripts"
:
{
"dev"
:
"webpack serve"
,
"build"
:
"webpack"
},
"devDependencies"
:
{
"@babel/core"
:
"^7.18.0"
,
"@babel/preset-env"
:
"^7.18.0"
,
"babel-loader"
:
"^8.2.5"
,
"core-js"
:
"^3.22.5"
,
"css-loader"
:
"^6.7.1"
,
"css-minimizer-webpack-plugin"
:
"^4.0.0"
,
"eslint"
:
"^8.15.0"
,
"eslint-config-airbnb-base"
:
"^15.0.0"
,
"eslint-plugin-import"
:
"^2.26.0"
,
"eslint-webpack-plugin"
:
"^3.1.1"
,
"html-loader"
:
"^3.1.0"
,
"html-webpack-plugin"
:
"^5.5.0"
,
"less"
:
"^4.1.2"
,
"less-loader"
:
"^11.0.0"
,
"mini-css-extract-plugin"
:
"^2.6.0"
,
"postcss"
:
"^8.4.14"
,
"postcss-loader"
:
"^7.0.0"
,
"postcss-preset-env"
:
"^7.6.0"
,
"style-loader"
:
"^3.3.1"
,
"terser-webpack-plugin"
:
"^5.3.1"
,
"webpack"
:
"^5.72.1"
,
"webpack-cli"
:
"^4.9.2"
,
"webpack-dev-server"
:
"^4.9.0"
},
"dependencies"
:
{
"@babel/polyfill"
:
"^7.12.1"
},
"browserslist"
:
{
"development"
:
[
"last 1 version"
],
"production"
:
[
"last 1 version"
,
"> 1%"
,
"ie 10"
]
},
"eslintConfig"
:
{
"extends"
:
"airbnb-base"
}
}
```
https://www.bilibili.com/video/BV1e7411j7T5?p=17&spm_id_from=pageDriver
https://www.bilibili.com/video/BV1e7411j7T5?p=19&spm_id_from=pageDriver
\ No newline at end of file
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录