从零开始的webpack生活-0x014:CustomLoader自定义loader

2023-11-13

0x001 概述

上一章我们讲了eslint-loader的配置,常用类型的常用loader已经都讲完了,大体上其他的都大同小异,需要去各大loader的官方查阅用户手册就可以了。接下来将loader的本质和自定义loader

0x002 环境配置

这一次需要两个项目,一个项目是custome-loader,实现了custome-loader,一个是user,使用了custom-loader

$ mkdir 0x0014-custome-loader
$ cd 0x0014-custome-loader

0x003 custome-loader实现

  1. custome-loader项目配置

    $ mkdir custome-loader
    $ cd custome-loader
    $ npm init -y
  2. 实现custome-loader

    $ vim ./index.js
    /**
     * 实现一个函数
     * 作用是将`var`替换成`let`
     * @param content 字符串
     * @returns string 字符串 */
        module.exports = function (content) {
            console.log(content)
            content = content.replace(/var/g, 'let')
            console.log(content)
            return content;
             };
  3. 测试

    $ vim ./test/index.js
    // ./test/index.js
    var custom = require('./../index')
    custom('var name="张三"')
    
    $ node  ./test/index.js
    元数据 var name="张三"
    处理之后 let name="张三"

0x004 custome-loader使用

  1. 配置

    $ mkdir user
    $ cd user
    $ npm init -y
    $ vim webpack.config.js
    // ./webpack.config.js
    const path = require('path');
    
    module.exports = {
        entry : {
            'index': ['./src/index.js'],
        },
        output: {
            path    : path.join(__dirname, 'dist'),
            filename: '[name].bundle.js'
        }
    ;
  2. 本地安装依赖

    $ npm install --sve-dev /MY_PROJECT/PROJECT_OWN/webpack_study/0x014-custom-loader/custom-loader
    # 输出
    pm WARN user@1.0.0 No description
    npm WARN user@1.0.0 No repository field.
    +custom-loader@1.0.6
    updated 1 package in 0.3s
    
  3. 修改配置

    const path     = require('path');
    module.exports = {
        entry : {
            'index': ['./src/index.js'],
        },
        output: {
            path    : path.join(__dirname, 'dist'),
            filename: '[name].bundle.js'
        },
        module: {
            rules: [
                {
                    test  : /\.js$/,
                    loader: "custom-loader",
                }
            ]
        }
    }
    ;
    
  4. 打包

    $ webpack
    # 输出
    元数据 var name="张三"
    var age=14
    
    处理之后 let name="张三"
    let age=14
    
    Hash: 4040662a699dbc91f8dd
    Version: webpack 3.8.1
    Time: 68ms
              Asset     Size  Chunks             Chunk Names
    index.bundle.js  2.62 kB       0  [emitted]  index
       [0] multi ./src/index.js 28 bytes {0} [built]
       [2] ./src/index.js 25 bytes {0} [built]
    
  5. 查看打包结果

    /* 1 */
    /***/ (function(module, exports) {
    
    let name="张三"
    let age=14
    
    
    /***/ })
    /******/ ]);

    可以看到,webpack在打包的时候,将./src/index.js的内容作为我们定义在custome-loader中的方法的参数,同时执行该方法,将处理后的返回值作为结果输出到./dist/index.bunle.js.

0x005 更多配置

这里只是实现了一个最简单的loader,而webpack官方还提供了许多其他的API来实现功能更加强大的loader,凭借这些API我们也可以写出自己的file-loaderjson-loader之类的。当然没有必要去真的重复制造轮子,只是为了掌握这种造轮子的技术,对理解整个webpack工程,对理解web功能提供更多思路而已。

0x006 资源

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从零开始的webpack生活-0x014:CustomLoader自定义loader 的相关文章

随机推荐

  • 提升网速 网卡和驱动

    去某宝下单了 是网卡和驱动的问题 某宝说网卡和驱动是一个意思 以下是操作步骤 更新驱动程序后从联想官网下载本台电脑对应的驱动 下载可以识别自己主机编号的软件 主机信息识别工具 然后获取编号 然后下载自己的有线网卡
  • 使用VS2010编写Linux程序

    使用VS2010开发Linux程序的好处 编写和调试都很方便 甚至不用自己编写Makefile文件 系统直接就生成了 特别是对于一些不熟悉Linux环境以及gdb调试的同学来说 这个就相对来说容易上手多了 下面就来介绍下环境的搭建 环境 w
  • mac电脑前端环境配置【包含m1芯片】

    目录 一 nvm的安装 1 卸载已安装到全局的 node npm 2 nvm安装 安装命令 常用命令 可能的问题 二 Git环境 1 安装git 2 git ssh 配置 3 重新配置 重新配置 也要在Terminal终端进行 4 测试配置
  • windwos11降级,重装Windows10

    windwos11降级 重装Windows10 序言 硬件信息 前提说明 制作U盘启动盘 修改电脑bios配置 重装系统 U盘启动 注意事项 驱动问题 序言 电脑到手查看安装的是Windows11家庭版系统 在视觉上整体感受更加圆滑柔顺 但
  • C++中动态数组实现

    实现动态数组 动态数组 示例代码 运行环境 运行效果 动态数组 动态数组Vector可以动态扩展内存 其采用连续的内存空间 当内存空间不足 便以原来的容量的2倍或者1 5倍成倍的扩展 将原有的数组元素拷贝到新分配的内存空间中 释放原有的内存
  • [Unity3D]呼风唤雨:天气插件UniSky的使用教程与案例

    UniSky是Unity3D的一款模拟环境天气的插件 使用它可以简单的实现呼风唤雨的各种功能 下载地址 请点击我 使用起来也非常的方便 引入Package后 注意路径必须是英文否则会出错 Project中会多一个文件夹 下面我们来简单的创建
  • 华为OD机试 【玩牌高手】(Java )

    题目 代码 import java util Scanner public class CardScoreCalculator public static void main String
  • 关于线性回归那些事儿

    1 如何理解线性回归中的方差齐性 在两组和多组比较中 每组都有很多数据 可以求出每组的方差 然后比较就行了 很容易理解 但是在线性回归中 有的人就不理解方差齐性是什么意思了 因为线性回归中自变量x不是分类变量 x取值很多 通常情况下 每个x
  • C++使用std::thread 多线程展开for循环,for循环并行计算

    比如说有一个for循环 需要迭代100次 来累加1 2 3 100计算其结果 创建10个线程 第一个线程累加1 2 10 第二个线程计算11 12 20等 那么如何优化呢 其实OpenMP库是可以直接调用的 只需要在for循环上面加一个指令
  • 搭建Node开发环境,Node.js的集成开发环境(IDE)搭建

    搭建Node开发环境 使用文本编辑器来开发Node程序 最大的缺点是效率太低 运行Node程序还需要在命令行单独敲命令 如果还需要调试程序 就更加麻烦了 所以我们需要一个IDE集成开发环境 让我们能在一个环境里编码 运行 调试 这样就可以大
  • Springboot结合线程池的使用

    1 使用配置文件配置线程的参数 配置文件 thread pool core size 100 max size 100 keep alive seconds 60 queue capacity 1 配置类 Component Configu
  • 【华为OD机试真题c++/java/python】农场施肥【2023 Q1A卷

    2023华为OD机试 刷题指南 点这里 华为OD机试 2023真题考点分类 点这里 题目描述 某农场主管理了一大片果园 fields i 表示不同果林的面积 单位 m 2 现在要为所有的果林施肥且必须在 n 天之内完成 否则影响收成 小布是
  • 数据库SQL千万级数据规模处理概要

    我在前年遇到过过亿条的数据 以至于一个处理过程要几个小时的 后面慢慢优化 查找一些经验文章 才学到了一些基本方法 综合叙之 与君探讨之 1 数据太多 放在一个表肯定不行 比如月周期表 一个月1000万 一年就1 2亿 如此累计下去肯定不行的
  • Android Studio Button 美化

    改变按钮Button控件的边角 填充颜色 边框颜色 步骤 在 res gt drawable 中新建一个 btn all shape xml
  • Unity——新输入系统Input System

    1 安装 安装 直接到包管理器Window gt Package Manager安装即可 安装后提示需要重启 重启后即可使用 注意 在Project Settings中的Player设置里将Active Input Handling设置为I
  • 计算鬼成像学习笔记一:简介

    这里写目录标题 1 何为鬼成像 1 1 传统光学成像 所见即所得 1 2 鬼成像 又称关联成像 1 2 1 桶探测器 1 2 2 CCD 1 2 3 空间分辨率 1 2 4 光源 1 2 5 纠缠光子 1 2 6 赝热光源 1 2 7 散斑
  • springboot maven 子模块没有java文件夹 或 pom.xml灰色

    1 pom xml灰色 2 子模块 modules 没有添加到父模块 报错
  • 大学【微机原理与接口技术】参考资料、该视频笔记

    该百度网盘链接 是我学习 微机原理与接口技术 的参考资料 感觉讲的不错 有需要评论区下发qq邮箱 我看到会发给你 该视频笔记参考我的博客 https blog csdn net weixin 42214698 category 115770
  • PPPoE原理与配置方法

    一 PPPoE原理 数字用户线路DSL Digital Subscriber Line 是以电话线为传输介质的传输技术 人们通常把所有的DSL技术统称为xDSL x代表不同种类的数字用户线路技术 目前比较流行的宽带接入方式为ADSL ADS
  • 从零开始的webpack生活-0x014:CustomLoader自定义loader

    0x001 概述 上一章我们讲了eslint loader的配置 常用类型的常用loader已经都讲完了 大体上其他的都大同小异 需要去各大loader的官方查阅用户手册就可以了 接下来将loader的本质和自定义loader 0x002