网易首页 > 网易号 > 正文 申请入驻

盘点那些在Webpack中常见的Plugins

0
分享至

一、是什么

plugin(Plug-in)是一种计算机应用程序,它和主应用程序互相交互,以提供特定的功能

是一种遵循一定规范的应用程序接口编写出来的程序,只能运行在程序规定的系统下,因为其需要调用原纯净系统提供的函数库或者数据

webpack中的plugin也是如此,plugin赋予其各种灵活的功能,例如打包优化、资源管理、环境变量注入等,它们会运行在webpack的不同阶段(钩子 / 生命周期),贯穿了webpack整个编译周期

目的在于解决loader无法实现的其他事

配置方式

这里讲述文件的配置方式,一般情况,通过配置文件导出对象中plugins属性传入new实例对象。如下所示:

const HtmlWebpackPlugin = require('html-webpack-plugin'); // 通过 npm 安装
const webpack = require('webpack'); // 访问内置的插件
module.exports = {
plugins: [
new webpack.ProgressPlugin(),
new HtmlWebpackPlugin({ template: './src/index.html' }),
],
二、特性

其本质是一个具有apply方法javascript对象

apply方法会被webpack compiler调用,并且在整个编译生命周期都可以访问compiler对象

const pluginName = 'ConsoleLogOnBuildWebpackPlugin';
class ConsoleLogOnBuildWebpackPlugin {
apply(compiler) {
compiler.hooks.run.tap(pluginName, (compilation) => {
console.log('webpack 构建过程开始!');

module.exports = ConsoleLogOnBuildWebpackPlugin;

compiler hooktap方法的第一个参数,应是驼峰式命名的插件名称

关于整个编译生命周期钩子,有如下:

  • entry-option :初始化 option
  • run
  • compile:真正开始的编译,在创建 compilation 对象之前
  • compilation :生成好了 compilation 对象
  • make 从 entry 开始递归分析依赖,准备对每个模块进行 build
  • after-compile:编译 build 过程结束
  • emit :在将内存中 assets 内容写到磁盘文件夹之前
  • after-emit :在将内存中 assets 内容写到磁盘文件夹之后
  • done:完成所有的编译过程
  • failed:编译失败的时候

三、常见的Plugin

常见的plugin有如图所示:

下面介绍几个常用的插件用法:

HtmlWebpackPlugin

在打包结束后,⾃动生成⼀个html⽂文件,并把打包生成的js模块引⼊到该html

npm install --save-dev html-webpack-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"


html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title><%=htmlWebpackPlugin.options.title%>title>
head>
<body>
<h1>html-webpack-pluginh1>
body>
html>

html模板中,可以通过<%=htmlWebpackPlugin.options.XXX%>的方式获取配置的值

更多的配置可以自寻查找

clean-webpack-plugin

删除(清理)构建目录

npm install --save-dev clean-webpack-plugin
const {CleanWebpackPlugin} = require('clean-webpack-plugin');
module.exports = {
plugins: [
...,
new CleanWebpackPlugin(),

mini-css-extract-plugin

提取CSS到一个单独的文件中

npm install --save-dev mini-css-extract-plugin
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
...,
module: {
rules: [
test: /\.s[ac]ss$/,
use: [
loader: MiniCssExtractPlugin.loader
},
'css-loader',
'sass-loader'

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

DefinePlugin

允许在编译时创建配置的全局对象,是一个webpack内置的插件,不需要安装

const { DefinePlugun } = require('webpack')
module.exports = {
plugins:[
new DefinePlugin({
BASE_URL:'"./"'

这时候编译template模块的时候,就能通过下述形式获取全局对象

<link rel="icon" href="<%= BASE_URL%>favicon.ico>"
copy-webpack-plugin

复制文件或目录到执行区域,如vue的打包过程中,如果我们将一些文件放到public的目录下,那么这个目录会被复制到dist文件夹中

npm install copy-webpack-plugin -D
new CopyWebpackPlugin({
parrerns:[
from:"public",
globOptions:{
ignore:[
'**/index.html'


复制的规则在patterns属性中设置:

  • from:设置从哪一个源中开始复制

  • to:复制到的位置,可以省略,会默认复制到打包的目录下

  • globOptions:设置一些额外的选项,其中可以编写需要忽略的文件

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
女排备战香港赛4人有进步,蔡斌渴望拿4连胜,朱婷、许晓婷有信心

女排备战香港赛4人有进步,蔡斌渴望拿4连胜,朱婷、许晓婷有信心

阿信点评
2024-06-08 18:47:42
挤走徐杰!广东队后场“新力量”正式崛起,朱芳雨终于要交易了?

挤走徐杰!广东队后场“新力量”正式崛起,朱芳雨终于要交易了?

绯雨儿
2024-06-08 15:23:24
绿军首胜引发内讧,塔图姆索要更多球权

绿军首胜引发内讧,塔图姆索要更多球权

篮球迷聚集地
2024-06-08 08:29:45
大爆冷!张本智和2:3被淘汰,无缘4强,世界冠军1:3不敌法国选手

大爆冷!张本智和2:3被淘汰,无缘4强,世界冠军1:3不敌法国选手

国乒二三事
2024-06-08 05:59:12
法网女单决赛预测:斯瓦泰克力争三连冠,鲍里妮若夺冠将升至NO.5

法网女单决赛预测:斯瓦泰克力争三连冠,鲍里妮若夺冠将升至NO.5

月下追寻者
2024-06-08 17:19:55
“五道杠”神童,曾因一脸“官相”而走红,如今却已泯然众人

“五道杠”神童,曾因一脸“官相”而走红,如今却已泯然众人

综艺停车场
2024-06-06 15:17:27
心酸!男子外企工作15年,40岁被裁员,躲厕所大哭!网友共鸣了

心酸!男子外企工作15年,40岁被裁员,躲厕所大哭!网友共鸣了

时尚的弄潮
2024-06-05 12:12:00
天津发生重大爆炸事故:3人死亡26户受损,更多内情曝光

天津发生重大爆炸事故:3人死亡26户受损,更多内情曝光

此处已无情
2024-06-07 18:46:54
禁止出口欧美?拜登彻夜未眠,外媒:没想到中国的“底牌”这么多

禁止出口欧美?拜登彻夜未眠,外媒:没想到中国的“底牌”这么多

科技龙
2024-06-07 15:37:27
江西客商投资河南滑县遇连环骗局 巨额资产被侵夺数亿投资打水漂

江西客商投资河南滑县遇连环骗局 巨额资产被侵夺数亿投资打水漂

京商FOCUS
2024-06-07 15:37:33
巴基斯坦总理:“我们将效仿中国发展模式”

巴基斯坦总理:“我们将效仿中国发展模式”

参考消息
2024-06-08 17:09:19
2006年,湖南一母亲和儿子乱伦26年,儿子为摆脱动了杀机

2006年,湖南一母亲和儿子乱伦26年,儿子为摆脱动了杀机

五月读书汇
2024-06-03 06:50:44
好不容易晋升为上将,怎料被儿子“拖下水”,涉案金额竟高达百亿

好不容易晋升为上将,怎料被儿子“拖下水”,涉案金额竟高达百亿

小lu侃侃而谈
2024-05-23 21:23:30
拜登因援助迟到六个月在巴黎向泽连斯基道歉,并再提供2.25亿援助

拜登因援助迟到六个月在巴黎向泽连斯基道歉,并再提供2.25亿援助

山河路口
2024-06-07 20:33:02
“脱钩”失效!我国降为美国第四大进口国,美却从墨、越大量进口

“脱钩”失效!我国降为美国第四大进口国,美却从墨、越大量进口

财话连篇
2024-06-08 13:26:01
16GB+1TB确认了!新机官宣:6月20日,新品全新发布!

16GB+1TB确认了!新机官宣:6月20日,新品全新发布!

天才引路星
2024-06-08 12:57:48
将近40岁满脸褶,却尬演18岁少女,是谁给了她“强行装嫩”的勇气

将近40岁满脸褶,却尬演18岁少女,是谁给了她“强行装嫩”的勇气

娱乐圈十三太保
2024-05-28 13:56:53
刘烨儿子疑遭同学控诉,开黄腔不尊重女生,一年追十几个女生!

刘烨儿子疑遭同学控诉,开黄腔不尊重女生,一年追十几个女生!

娱小小新
2024-06-06 13:59:25
突发!无锡一小区...

突发!无锡一小区...

无锡eTV全媒体
2024-06-08 16:04:11
618iPhone15大降价!现在千万别买。看完再买不后悔

618iPhone15大降价!现在千万别买。看完再买不后悔

美食终点站
2024-06-08 16:22:05
2024-06-08 19:40:49
小蓝百宝箱
小蓝百宝箱
品质源于专注,自信源于实力
56文章数 20关注度
往期回顾 全部

科技要闻

今年数学到底有多难?大模型:我也不太会

头条要闻

贪官42岁升副科级自认为"大器晚成" 对送钱的人说感谢

头条要闻

贪官42岁升副科级自认为"大器晚成" 对送钱的人说感谢

体育要闻

她拯救了WNBA,却为何被疯狂针对?

娱乐要闻

汤唯抵达巴黎将担任奥运火炬手

财经要闻

重磅详解:为什么美国经济还没有衰退?

汽车要闻

上汽大通大家9售26.99万起 综合续航1300km+

态度原创

艺术
数码
亲子
家居
房产

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

数码要闻

YOGA Book 9i AI元启开售 联想小天赋能创意双屏翻转

亲子要闻

孩子去太姥家,老人家送给孩子一个金手镯,宝宝看到镯子的反应逗笑众人

家居要闻

柔和婉转 让阳光洒满空间

房产要闻

顶流地段+顶级户型!香港半山豪宅,已成为高净值人群的资产压舱石!

无障碍浏览 进入关怀版