面经 | webpack

devtools/2024/9/25 7:11:54/

webpack

  • webpack
    • loader
      • 基本语法
        • rules
        • 自定义loader
      • 你可以写哪些loader?
      • 常见loader
    • plugin
      • webpack生命周期 [参考](https://blog.csdn.net/qq_17335549/article/details/137561075)
        • 常见plugin

webpack_1">webpack

一个打包工具,就和npm是一个包管理工具差不多。一般在项目文件中,通过webpack.config.js来配置。

loader

本质上是一种函数,作用是处理源文件。你比如,ts-loader,就是一个把ts转换成js的函数。其他常见的img-loader类似,也不是说一定就是做一个翻译,其实就理解成一个函数就行,函数做什么事情,看函数逻辑呗。所以,其实我们自己也可以自定义loader。

这篇文章写得很好,忘了可以看这个。loader

基本语法

就是module中rules里面配置loader。test指定文件,use指定要使用的loader;

// webpack.config.js
module.exports = {module: {rules: [{test: /\.ts$/i, use: "ts-loader"}],},
};
rules
  • rules是数组,执行顺序是从右到左。理解成数组的pop / 栈执行顺序;
    • rules:[loaderObj1,loaderObj2,loaderObj3]; 执行顺序就是 3 2 1;
    • 也可以通过enforce配置顺序;pre-normal-inline-post; 很好记, inline就是排队的意思,pre-post就是最前最后呗。
    • 在这里插入图片描述
自定义loader
  • 说了loader是一个函数,所以你可以自己新建一个文件,自定义loader函数: 然后在rules中引入就行了; (其实也可以在需要的其他文件中引入)
  • this.query 和 this.callback;
    • 去搜loader函数,很容易在函数中看到这样两行
let options=this.query; 
// ...
this.callback(null,content,map,meta);
  • this.query就是在获取你配置的{key:‘value’},如下图; // 要配置options的话,只能是一个对象;//
  • 函数返回可以通过调用return 返回,也可以通过调用this.callback返回,好处就是this.callback可以传递多个参数给下一个loader,return 只能传递当前loader转换后的content给下一个loader;
  • callback也可以分为同步和异步;对应也就是同步loader和异步loader;
    • 同步就是this.callback(…args)
    • 异步就是let callback=this.async(); callback(…args);
      在这里插入图片描述

你可以写哪些loader?

  • clean-log-loader:清除日志等等的吧

常见loader

  • babel-loader:es6->es5;
  • ts-loader:ts -> js
  • less-loader:less->css

plugin

大部分都是说功能比plugin强大,感觉强大就强大在可以监听webpack构建的生命周期,更加灵活地去操作资源。loader只是作用在出包前,更多地,只作用于文件,类似翻译功能什么的,plugin可以进行类似共同代码提取等等的。

webpack生命周期 参考

  • 简单来说:初始阶段-编译-构建-优化-产出-完成
  • plugin中的函数监听钩子函数
常见plugin
  • HtmlWebpackPlugin:把打包的js文件,自动引入到插件创建的html文件
    • 必要性:不用你手动去引入;
  • copy-webpack-plugin: 复制文件或者目录到指定的路径下;

http://www.ppmy.cn/devtools/116849.html

相关文章

openai最新o1上线(2024年09月12日)

gpt-4o-2024-08-06输出文本价格 10美元/M o1-preview输出价格 60美元/M https://lmarena.ai/?leaderboard 数字9.11和9.8谁大些 人工智能学习网站 https://chat.xutongbao.top/

使用 Puppeteer-Cluster 和代理进行高效网络抓取: 完全指南

文章目录 一、介绍?二、什么是 Puppeteer-Cluster?三、为什么代理在网络抓取中很重要?四、 为什么使用带代理的 Puppeteer-Cluster?五、分步指南: 带代理的 Puppeteer 群集5.1. 步骤 1:安装所需程序库5.2. …

开箱元宇宙| 探索 Great Entertainment Group 如何利用 Web3 和数字创新重新定义活动体验

有没有想过 Web3 等尖端技术是如何改变娱乐行业的?在本期「开箱元宇宙」系列中,我们与 Great Entertainment Group (GEG) 的 Web3 顾问 Rob Lacey 深度访谈,探讨这家充满活力的公司如何在其活动中开拓数字创新。 与我们一起揭示 GEG 如何将 …

git eslint扩展,解决git提交因为空格差异而报错

项目场景: 在前端项目开发中,经常会使用eslint,这个方法的好处就是严格要求代码格式。让代码更为严谨。 问题描述 以为eslint格式过于严谨,在git提交的时候,经常会因为一个多了一个空格导致代码提交失败。 原因分析:…

Spring Boot 学习和使用

文章目录 前言一、Spring Boot简介二、核心特性三、核心注解四、快速入门五、学习资源总结前言 Spring Boot是一款开源的Java Web应用框架,旨在简化Spring应用的初始搭建以及开发过程。以下是Spring Boot入门的详细介绍: 一、Spring Boot简介 Spring Boot通过整合Spring技术…

EtherCAT转Profient协议网关简述

Profinet 转 EtherCAT 的连接与通信问题一直是许多人关注的焦点,也常常给人们带来诸多困惑。在此,我们将深入剖析这一问题,并为大家提供切实可行的解决方案。WL-PN-ECATM型设备在这方面表现卓越,能够有效解决这一难题。接下来&…

傅里叶变换及其应用笔记

傅里叶变换 预备知识学习路线扼要描述两者之间的共同点:线性运算周期性现象对称性与周期性的关系周期性 预备知识 学习路线 从傅里叶级数,过度到傅里叶变换 扼要描述 傅里叶级数(Fourier series),几乎等同于周期性…

GEE数据集:基于Sentinel-1和Sentinel-2进行的POPCorn可扩展人口地图

目录 简介 代码 代码链接 应用APP 引用 网址推荐 0代码在线构建地图应用 机器学习 基于Sentinel-1和Sentinel-2进行的POPCorn可扩展人口地图 简介 Popcorn(人口普查数据)是一种人口测绘方法,旨在解决绘制精确人口地图的难题,尤其是在数据稀缺的地区。 Popcorn 仅…