webpack插件

目录

webpack插件

webpack-dev-server

安装

配置

启动

html-webpack-plugin

安装

配置

启动

devServer节点

在上篇文章中,我们学习了webpack入门,学会了如何安装、配置和使用webpack,在上篇文章中,我们使用webpack时有个小缺陷,就是当js代码发生改变时,webpack打包形成的js文件没有实时发生对应的改变,必须重新启动webpack进行项目的打包构建。

在这篇文章我们来学习webpack的插件,通过webpack的插件来实现对js代码发生改变时,实时改变webpack打包形成的js文件。

webpack插件

通过安装和配置第三方的插件,可以拓展webpack的能力,从而让webpack用起来更方便。

最常用的webpack插件有:webpack-dev-server和html-webpack-plugin。

这里我们使用上篇文章的change-div项目进行演示,其项目目录如下图所示:

运行index.html文件,如下图所示:

webpack-dev-server

webpack-dev-server插件:

  • 类似于node.js阶段用到的nodemon工具;

  • 每当修改了源代码,webpack会自动进行项目的打包和构建。

安装

安装方式很简单,执行如下代码即可在项目中安装该插件:

npm install webpack-dev-server@3.11.2 -D

这里我们下载的webpack-dev-server版本为3.11.2,当不加后面的@3.11.2时就会安装最新版本的插件

配置

首先修改package.json文件中scripts的dev命令,如下所示:

    "dev":"webpack serve",    

也就是说把package.json文件中的scripts节点的webpack改为webpack server。

再在webpack.config.js配置文件中module.exports添加如下代码:

    devServer:{
        static:'.',
    }

该代码作用是告诉webpack-dev-server服务器在哪里找项目文件。

启动

通过执行如下命令来启动webpack-dev-server服务:

npm run dev

如下图所示:

执行代码后,webpack-dev-server会启动一个实时打包的http服务器,终端会一直检测代码是否发生改变,当我们的代码发生改变时,就会webpack serve就会自动打包构建,例如当我们把change-div项目中的index.js代码的red改为blue并保存,webpack serve就会自动打包构建,如下图所示:

这样就成功自动打包构建了。

注意:自动生成的打包是生成在内存中,而我们index.html读出的是物理磁盘中的main.js,所以是没效果的。

需要修改index.html对main.js的引用,index.html代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 物理磁盘引入 -->
    <!-- <script src="../dist/main.js"></script> -->
    <!-- 内存引入 -->
    <script src="/main.js"></script>
</head>
<body>
    <div>这是div标签</div>
</body>
</html>

修改index.js文件后,接下来我们访问http://localhost:8080/,如下图所示:

可以发现,页面的内容就是我们项目目录,点击src文件就会显示index.html页面,如下图所示:

html-webpack-plugin

html-webpack-plugin插件:

  • webpack中的HTML插件(一个类似模板引擎插件);

  • 可以通过该插件自定制index.html页面的内容。

简单来说就是访问http://localhost:8080/时,直接展示你想展示的html页面。

安装

执行如下代码即可在项目中安装该插件:

npm install html-webpack-plugin@5.3.2 -D

这里我们下载的html-webpack-plugin版本为5.3.2,当不加后面的@5.3.2时就会安装最新版本的插件。

配置

在webpack-config.js文件加入以下代码:

const HtmlPlugin=require('html-webpack-plugin')     //导入HTML插件,获取构造函数
const htmlPlugin=new HtmlPlugin({
    template:'./src/index.html',    //指定原文件的存放路径
    filename:'./index.html',        //指定生成的文件存放路径
})

添加后,还需要在webpack.config.js文件的module.exports节点添加如下代码:

plugins:[htmlPlugin]

该代码的作用是通过plugins节点,使HTMLPlugin插件生效。

启动

通过执行如下命令来启动webpack-dev-server服务:

npm run dev

启动成功后,我们直接访问http://localhost:8080/就会出现index.html的页面,如下图所示:

注意:

通过HTML插件复制到项目根目录中的index.html页面,也被放到了内存中;

HTML插件在生成的index.html页面,自动注入了打包的main.js文件。

devServer节点

在webpack.config.js配置文件配置webpack-dev-server时,我们添加了devServer节点,节点里面配置了static:'.',代码,该代码告诉webpack-dev-server服务器在哪里找项目静态文件文件。

通过devServer节点对webpack-dev-server插件进行更多的配置。

除了该配置,我们还可以在devServer节点下添加以下配置:

open:true,			//初次打包完成后,自动打开浏览器
host:'127.0.0.1',	//实时打包所使用的主机地址
port:80,			//实时打包所使用的端口号

注意:只要修改了webpack.config.js配置文件或修改了package.json配置文件,必须重启webpack-dev-server服务器,否则最新的配置文件无法生效。

好了,webpack插件就学到这里了,感谢观看!!!

### Webpack 插件钩子机制详解 #### 钩子机制概述 Webpack 的核心特性之一在于其强大的插件系统,这使得开发者能够自定义构建过程。WebPack 使用一种称为“钩子”的机制来允许插件在特定的时间点执行代码。这些时间点可以是在编译开始之前、完成之后或是其他任何有意义的时刻。 #### 基本概念 - **同步钩子(Sync Hooks)**:当触发条件满足时立即按顺序调用所有注册函数。 - **异步钩子(Async Hooks)**:支持并行或串行处理任务,在所有回调完成后继续流程[^3]。 #### 实现方式 为了实现这种灵活性,Webpack 设计了一套基于事件驱动架构的工作流模型。每当发生某些预设的动作(如启动编译),就会发出相应的信号通知已订阅该动作的所有监听器去响应。例如 `html-webpack-plugin` 就利用了这一特点,在每次成功打包后会自动注入最新的资源链接到HTML模板中[^2]。 #### 生命周期挂钩 不同类型的插件可以在 Webpack 编译的不同阶段介入工作。以 `clean-webpack-plugin` 为例,它绑定了 emit 这一关键时刻——即即将写入文件系统的那一刻清除旧版输出目录的内容,从而确保新版本不会受到遗留文件的影响[^4]。 ```javascript const { CleanWebpackPlugin } = require('clean-webpack-plugin'); module.exports = { plugins: [ new CleanWebpackPlugin() ] }; ``` 对于更复杂的场景,则可能涉及到多个钩子组合使用的情况。此时就需要深入理解各个钩子之间的关系以及它们在整个编译过程中所处的位置。官方文档虽然提供了基础指导,但对于一些高级应用来说,查阅源码可能是获取最准确信息的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白巧克力LIN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值