说说webpack中常见的Plugin?解决了什么问题?
# 是什么
webpack 中的 plugin 是一个函数,它和主程序互相交互,提供特定的功能
解决 loader 不能解决的事情
const HtmlWebpackPlugin = require('html-webpack-plugin'); // 通过 npm 安装
const webpack = require('webpack'); // 访问内置的插件
module.exports = {
...
plugins: [
new webpack.ProgressPlugin(),
new HtmlWebpackPlugin({ template: './src/index.html' }),
],
};
# 特性
apply 方法会被 webpack compiler 调用,并且在整个编译生命周期都可以访问 compiler 对象
const pluginName = "ConsoleLogOnBuildWebpackPlugin";
class ConsoleLogOnBuildWebpackPlugin {
apply(compiler) {
compiler.hooks.run.tap(pluginName, (compilation) => {
console.log("webpack 构建过程开始!");
});
}
}
module.exports = ConsoleLogOnBuildWebpackPlugin;
# 编译生命周期勾子
entry-option :初始化 option
run
compile:真正开始的编译,在创建 compilation 对象之前
compilation :生成好了 compilation 对象
make 从 entry 开始递归分析依赖,准备对每个模块进行 build
after-compile:编译 build 过程结束
emit :在将内存中 assets 内容写到磁盘文件夹之前
after-emit :在将内存中 assets 内容写到磁盘文件夹之后
done:完成所有的编译过程
failed:编译失败的时候
# 常见 plugin
// webpack.config.js
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
...
plugins: [
new HtmlWebpackPlugin({
title: "My App",
filename: "app.html",
template: "./src/html/index.html"
})
]
};
const {CleanWebpackPlugin} = require('clean-webpack-plugin');
module.exports = {
...
plugins: [
...,
new CleanWebpackPlugin(),
...
]
}
const { DefinePlugun } = require('webpack')
module.exports = {
...
plugins:[
new DefinePlugin({
BASE_URL:'"./"'
})
]
}
<link rel="icon" href="<%= BASE_URL%>favicon.ico>"
new CopyWebpackPlugin({
parrerns:[
{
from:"public",
to:'' // 复制到的位置,可以省略,会默认复制到打包的目录下
globOptions:{
ignore:[
'**/index.html'
]
}
}
]
})
# FAQ

上次更新: 2021/12/19, 18:05:42