webpack Plugin Loader

news2024/12/23 4:53:20

本文作者为 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.coloradmin.cn/o/542905.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我将开始更新 强化学习

你好&#xff0c;我是zhenguo&#xff08;郭震&#xff09; 很久没有更新文章&#xff0c;从现在开始我将逐步恢复更新。在接下来的日子&#xff0c;我将系统更新强化学习文章&#xff0c;在期间&#xff0c;也会插播一些读博做科研的一些日常总结。如果你感兴趣&#xff0c;欢…

【观察】华为:持续创新,场景聚焦,推动数据中心实现可持续发展

毫无疑问&#xff0c;在数字经济时代&#xff0c;数据被纳入“新型生产要素”&#xff0c;而数据中心作为承载数据价值的关键&#xff0c;不仅是国民经济发展的重要基础设施&#xff0c;更成为了科技创新和技术应用的实体。也正因此&#xff0c;过去十几年数据中心产业实现了快…

最新开源!更擅长推理的LLaMA大模型,支持中文

©PaperWeekly 原创 作者 | 李忠利 研究方向 | 自然语言处理 跟大家介绍一下自己最近训练的 LLaMA 模型——BiLLa: A Bilingual LLaMA with Enhanced Reasoning Ability. Github 地址&#xff1a; https://github.com/Neutralzz/BiLLa HuggingFace 模型&#xff1a; ht…

【Python】数据分析与可视化实践:收支日统计数据可视化的实现

Python数据分析与可视化实践&#xff1a;收支日统计数据可视化的实现 Author&#xff1a;萌狼蓝天 Date&#xff1a;2023-5-7 数据读入与基本处理 上图是原始数据的一部分&#xff0c;存放于excel中&#xff0c;首先使用pd读入数据。读入数据后&#xff0c;删除不是收入&#x…

chatgpt赋能Python-python3_8_3怎么用

Python 3.8.3&#xff1a;简介与使用 Python是一种高级编程语言&#xff0c;拥有许多库和框架&#xff0c;是Web开发、数据分析、机器学习、人工智能等领域的首选语言之一。而Python 3.8.3是Python的最新版本&#xff0c;在新功能、稳定性、安全性等方面都有很大提升。 Pytho…

Midjourney 创建私人画图机器人,共享账号如何设置独立绘画服务器

本教程收集于:AIGC从入门到精通教程 Midjourney 创建私人画图机器人,共享账号如何设置独立绘画服务器 你是不是遇到以下问题: 1.Midjourney会员怎么自建绘图服务器,不受其他人的打扰? 2.Midjourney会员共享账号如何自建服务器,供其他人使用? 3.在官方服务器作图,频…

gRPC-go参数功能介绍总结目录(专栏)

本篇文章是gRPC-go框架的参数功能介绍总结 本篇文章的目的: 查看快速方便查询gRPC-go都有哪些参数可用!可以快速的查询到相关案例!gRPC-go版本是v1.30.0 可以从下面的地址下载gRPC-go版本 链接: https://pan.baidu.com/s/1za02qnUII78n-XhlrLf7RA 密码: 3tok 1、grpc-go客…

深入浅出 OkHttp 源码解析及应用实践

作者&#xff1a;vivo 互联网服务器团队- Tie Qinrui OkHttp 在 Java 和 Android 世界中被广泛使用&#xff0c;深入学习源代码有助于掌握软件特性和提高编程水平。 本文首先从源代码入手简要分析了一个请求发起过程中的核心代码&#xff0c;接着通过流程图和架构图概括地介绍…

chatgpt赋能Python-python3_7_6怎么用

Python 3.7.6怎么用 – 简单易上手的编程语言 Python是一种简单易用的编程语言&#xff0c;已经成为了计算机科学领域中最受欢迎的语言之一。Python内置了许多库和工具&#xff0c;可以让用户轻松地完成各种任务。 作为Python的最新版本&#xff0c;Python 3.7.6带来了许多令…

Java Web项目中无效数据怎样处理?

最近在做一个java web项目(自己随便想的)&#xff0c;遇到一个这个的需求&#xff0c;就是从后台数据库根据用户id数据查询用户信息给前端用作个人主页展示吧&#xff01;&#xff0c;但是后台数据库中用户信息中是有密码字段(虽然进行了加密处理)的&#xff0c;对于这个密码数…

一个玩游戏的失足青年,转行做编程到教育的挣扎过程(3/4)

有一个人&#xff0c;从小的心愿是当一名飞行员&#xff0c;终于有一天他当上了飞行员。 但是&#xff0c;他第一次飞行时&#xff0c;飞机就出事了。 好在他能够跳伞。但是&#xff0c;降落却是坏的&#xff0c;打不开...... 突然&#xff0c;他看见了在正下方的地上&#xff…

声音生成——将Autoencoder修改成Variant Autoencoder在mnist训练

文章目录 概述VariantAutoencoder.py文件实现关闭eager execution修改bottlenectk组件修改loss损失函数VariantAutoencoder.py实现的全部代码 train.py文件实现load_mnist模块train模块完整代码执行效果 总结Analysis代码 概述 之前的一篇文章中&#xff0c;介绍了如何实现aut…

if

[rootes3 data]# cat ifaction.sh #!/bin/bash#********************************************************************read -p "请输入身高(m为单位): " HIGH if [[ ! "$HIGH" ~ ^[0-2](\.[0-9]{,2})?$ ]];then echo "输入错误的身高!" exit…

面试字节,简历做了点手脚,第三方背调公司查出来了,被撤销offer!

简历做了手脚被查出来&#xff0c;怎么办&#xff1f; 一位面试字节的程序员哀叹&#xff1a; 运气差&#xff0c;在简历上做了点手脚&#xff0c;被第三方背调查出来了&#xff0c;只能等着被通知撤销offer&#xff01; 有人说&#xff0c;现在背调查的可严格了&#xff0c;字…

Robust 2.0:支持Android R8的升级版热修复框架

2016年&#xff0c;我们对美团Android热更新方案Robust的技术原理做了详细介绍。近几年&#xff0c;Google 推出了新的代码优化混淆工具R8&#xff0c;Android 热修复补丁制作依赖二次构建包和线上包对比&#xff0c;需要对Proguard切换到R8提前进行适配和改造&#xff0c;本文…

鄞州银行:符合中小银行质量提升的数据治理方案

案例简介 在数字化转型的驱动和数据治理“严监管”的推动下&#xff0c;为解决金融机构数据治理体系不健全、数据质量低下等问题&#xff0c;利用数据治理成熟度评估模型进行问题分析定位&#xff0c;重点围绕数据规划、组织机制、标准建设以及数据类平台建设等方面进行数据质…

springboot+jsp网上药品商城销售管理系统

本设计需要实现一套方便药品管理者轻松便捷的处理药品运营工作的药品销售管理系统。设计并实现了特殊药品管理系统。系统选用B/S模式&#xff0c;应用java开发语言&#xff0c; MySQL为后台数据库。系统主要包括主页、个人中心、用户管理、药品类别管理、药品信息管理、系统管理…

Boy,Slowly...

很多朋友问我为啥写的少了。我说很多东西都是常识&#xff0c;老生常谈无数遍了&#xff0c;不想不断重复写了。常识性的东西&#xff0c;不断强调是对的&#xff0c;但是不断重复写&#xff0c;这就不对了。 &#xff08;1&#xff09;朴素 早上看一位朋友发了一条王兴过去老生…

使用Python复制某文件夹下子文件夹名为数据文件夹下的所有以DD开头的文件夹到桌面...

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 楼阁玲珑五云起&#xff0c;其中绰约多仙子。 大家好&#xff0c;我是皮皮。 一、前言 前几天在Python最强王者群【魏哥】问了一个Python自动化办公处理…

macOS Ventura 13.4 (22F66) 正式版发布,ISO、IPSW、PKG 下载

本站下载的 macOS Ventura 软件包&#xff0c;既可以拖拽到 Applications&#xff08;应用程序&#xff09;下直接安装&#xff0c;也可以制作启动 U 盘安装&#xff0c;或者在虚拟机中启动安装。另外也支持在 Windows 和 Linux 中创建可引导介质。 请访问原文链接&#xff1a…