webpack Plugin Loader

news/2024/11/30 2:41:18/

本文作者为 360 奇舞团前端开发工程师

webpackJavascript工具链的关键部分。webpack是个用于现代JavaScript应用程序的静态模块打包工具。它不仅可以支持ESMCommonJS模块化编程,而且还可以支持或扩展支持许多不同的静态资源,例如:Files,Images, Fonts, JS, CSS, HTML等。

Plugin

概念

插件webpack的支柱功能,它是一个具有apply方法的JavaScript对象。apply方法会被webpack compiler调用,并且插件在其整个生命周期都可以访问到compiler对象,因此他可以hook整个编译的生命周期。

class MyCustomPlugin  {apply(compiler) {compiler.hooks.run.tap('MyCustomPluginName',(compilation)=>{console.log('webpack 构建正在启动');})}
}
module.exports = MyCustomPlugin;

webpack可以利用plugin来扩展其功能,常用的插件有:

  1. HtmlWebpackPlugin:根据模板生成HTML文件,并自动添加CSS和JS的引用。

  2. MiniCssExtractPlugin:将CSS提取为单独的文件,并在HTML中引用它。

  3. UglifyJsPlugin:压缩JS代码,减小文件大小,提高加载速度。

  4. CleanWebpackPlugin:清空指定目录中的旧文件,防止文件冗余。

  5. CopyWebpackPlugin:复制指定目录中的文件到输出目录中。

  6. DefinePlugin:定义全局常量,方便在JS中使用。

  7. ProvidePlugin:自动加载模块,无需在JS文件中导入。

  8. HotModuleReplacementPlugin:开启模块热替换功能,支持修改代码后自动刷新页面。

  9. IgnorePlugin:忽略指定模块,减小文件大小,提高打包速度。

  10. BundleAnalyzerPlugin:生成打包报告,分析项目中各个模块的大小和依赖关系。

使用

以下是一个基于HtmlWebpackPlugin的示例工程,主要展示插件的基本使用,帮助理解插件的扩展能力:

d90faec0cc20082f42a75997b74cff86.png
image.png

最终执行编译后只会输出dist/main.js没有.html文件;此时我们可以引入插件HtmlWebpackPlugin,来生成.html代码并且自动引入编译后的js bundle,它的安装如下:

npm install --save-dev html-webpack-plugin

配置与最终结果如下图:

81885e6372c8bb7bd984daa6921c943a.png
image.png

Loader

概念

loader用于对模块的源代码转换,它相当于编译期间的一个任务。起初webpack只理解javaScript文件,但是webpack将每个作为模块导入的文件视为依赖项,并将其添加到依赖关系图中。因此为了处理静态资源的导入,例如:Files,Images, Fonts, CSS, Json等,webpack使用Loader来将这些文件加载到bundle中。常用的loader:

  1. babel-loader:将ES6及以上版本的JavaScript代码转换成ES5及以下的版本,以保证兼容性。

  2. css-loader:处理CSS文件中的url()等引用外部文件的语法,并将CSS代码转换为Webpack可以处理的模块。

  3. file-loader:将文件复制到输出目录,并返回文件的URL地址。

  4. url-loader:类似于file-loader,但是可以将文件转换为Base64编码的Data URL,减少HTTP请求。

  5. style-loader:将CSS代码以<style>标签的形式插入到HTML文件中。

  6. sass-loader:处理Sass/Scss代码,并将其转换为CSS代码。

  7. less-loader:处理Less代码,并将其转换为CSS代码。

  8. json-loader:处理JSON格式的文件,并将其转换为JavaScript对象。

  9. xml-loader:处理XML格式的文件,并将其转换为JavaScript对象。

  10. raw-loader:将文件内容以字符串的形式导出。

使用

基于上述插件的示例工程,我们为其加入CSS代码,来展示如何使用Loader转换CSS

ebb7d302c39ba0c39bd61c737885a52a.png
image.png

一切准备就绪,执行打包脚本,发现报错:You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file

为了能够导入CSS,我们需要安装style-loadercss-loader,并在module.rules下配置这些loader:

npm install --save-dev style-loader css-loader

具体配置如下图:

76f632b8e2b8c569fef9f309968ebf05.png
image.png

重新打包后,浏览器运行index.html,会发现css样式生效了。

不过需要注意的是 导入css文件,应保证 loader 的先后顺序:style-loader 在前,而 css-loader 在后。否则webpack可能会抛出错误。这是因为loader 可以链式调用, 链中的每个 loader 都将对资源进行依次转换和传递。只需保证webpack链中的最后一个loader返回javaScript即可。

- END -

关于奇舞团

奇舞团是 360 集团最大的大前端团队,代表集团参与 W3C 和 ECMA 会员(TC39)工作。奇舞团非常重视人才培养,有工程师、讲师、翻译官、业务接口人、团队 Leader 等多种发展方向供员工选择,并辅以提供相应的技术力、专业力、通用力、领导力等培训课程。奇舞团以开放和求贤的心态欢迎各种优秀人才关注和加入奇舞团。

5dc17c4c76368ae87fb3c905046282da.png


http://www.ppmy.cn/news/71308.html

相关文章

第03讲:SpringCloudStream实现分布式事务

需求分析 本案例是通过一个发送短信验证码的功能来实验MQ发送消息时实现分布式事务&#xff0c;思路分析如下 消息生产者生产发送验证码的半消息 生产者执行本地事务&#xff08;将验证码保存到数据库&#xff09;&#xff0c;并记录事务的ID&#xff0c;如果整个过程不出现异…

深度学习在自然语言处理方面的应用

前言 自然语言处理是一种将自然语言转换为计算机可处理的形式的技术。深度学习是一种非常强大的机器学习技术&#xff0c;它在自然语言处理方面也有广泛的应用。本文将详细介绍深度学习在自然语言处理方面的应用。 自然语言处理的基本步骤 自然语言处理的基本步骤包括分词、词…

AUTOSAR NvM 同步机制

一、部分 NvM API 解释 &#xff08;1&#xff09;Std_ReturnType NvM_ReadBlock(NvM_BlockIdType BlockId,void* NvM_DstPtr) 把Nv Block中的数据copy到NvM_DstPtr指向的RAM中&#xff0c;NvM_DstPtr可以是临时RAM&#xff0c;也可以是永久RAM&#xff08;永久RAM即配置工具…

森海塞尔及诺音曼携重磅新品亮相2023广州国际专业灯光、音响展览会

森海塞尔及诺音曼携重磅新品亮相2023广州国际专业灯光、音响展览会 以卓越产品和创新技术引领专业音频行业发展 广州&#xff0c;2023年5月16日——森海塞尔和诺音曼将于2023年5月22日至25日&#xff0c;携重磅新品及全新音频技术亮相第21届广州国际专业灯光、音响展览会。森海…

「聊天机器人构建、智能文档问答」大模型应用开发实操课程来了

此刻&#xff0c;生成式 AI 正以惊人的势头改变着我们的世界&#xff0c;无论是在科技、商业还是日常生活中&#xff0c;新的浪潮席卷着全球各个行业和领域。 跟过去十几年中“有多少人工就有多少智能”的智障 AI 比起来&#xff0c;大模型如 OpenAI 的 GPT-4 、百度的文心一言…

Cesium源码分享--标绘

Cesium标绘插件 在线api文档说明 在线体验地址1&#xff08;三维框架内&#xff09; 在线体验地址2 更多案例地址 免费gis数据 ps&#xff1a;如果可以的话&#xff0c;希望大家能给我个star&#xff0c;好让我有更新下去的动力&#xff1b; 实现原理&#xff1a; 其中实…

Oracle 21c部署 in Docker

目录 # 热分配新硬盘 # 拉取镜像 # 启动数据库 访问Oracle数据库 本环境的用途为开发测试环境&#xff1b;所以&#xff0c;分配给Oracle的资源相对较低&#xff1b;如果在生产环境下&#xff0c;请提前规范分配的CPU、内存、IO、磁盘&#xff08;本地磁盘 or 网络存储、磁…

Day01 关系型数据MySQL简介与多平台安装配置

在大数据的课程中&#xff0c;我们需要处理的数据来自不同的渠道&#xff0c;其中有一个很重要的渠道就是关系型数据库中存储的数据。在企业中&#xff0c;会把业务数据存储在关系型数据库中&#xff0c;一般以MySQL居多。另外&#xff0c;我们在后续的课程中需要学习Hive、Spa…