webpack4之如何编写loader的方法步骤


Posted in Javascript onJune 06, 2019

之前学习过webpack3的知识,但是webpack4升级后还是有很多变动的,所以这次重新整理一下webpack4的知识点,方便以后复习。

这次学习webpack4不仅仅要会配置,记住核心API,最好还要理解一下webpack更深层次的知识,比如打包原理等等,所以可能会省略一些比较基础的内容,但是希望我可以通过此次学习掌握webpack,更好地应对以后的工作。

1.编写入门级loader

我在之前的文章中,已经把webpack基础的内容基本上都过了一遍,现在开始准备复习更高级的webpack知识了,首先从loader开始。

首先初始化一个项目

npm init

然后安装依赖

cnpm install -D webpack webpack-cli

创建一个src目录,里面创建一个index.js

webpack4之如何编写loader的方法步骤

新建一个webpack.config.js,写入最基本的配置

webpack4之如何编写loader的方法步骤

如果此时,我们有个需求,中打包过程中,需要把world替换成mark,我们就可以借助loader来实现。首先在src同级目录新建一个loader文件夹,里面新建一个replaceLoader.js。

webpack4之如何编写loader的方法步骤

replaceLoader.js需要导出一个函数,注意:这个函数不能是箭头函数,因为webpack调用loader的时候会对this做一些变更,上面有一些方法,如果使用箭头函数,this指向就会有问题,没有办法调用this上的一些方法。

函数可以接受一个参数,参数是我们源代码的内容,所以可以对source进行操作后,return source,就可以改变源代码了。

webpack4之如何编写loader的方法步骤

然后使用我们自己写的loader,use就不填写loader名称了,需要写我们编写的loader的路径。

webpack4之如何编写loader的方法步骤

这样我们打包后发现,world已经被替换成mark了,这样我们就实现了一个最简单的loader。

2.给loader配置参数

loader中常常可以配置一些参数,那么我们如果想配置参数,要怎么做呢?

webpack4之如何编写loader的方法步骤

此时在replaceLoader中,可以通过this.query访问到参数。

webpack4之如何编写loader的方法步骤

webpack4之如何编写loader的方法步骤

webpack4之如何编写loader的方法步骤

这样打包后,结果就会替换成我们的参数,但是官方推荐我们使用loader-utils来传参。

cnpm install --save-dev loader-utils

webpack4之如何编写loader的方法步骤

这样打包的结果也是我们传入的参数。

3.this.callback

有时候我们不止要return一个resource,还可能要返回多个结果,就需要用到callback。

this.callback(
 err: Error | null,
 content: string | Buffer,
 sourceMap?: SourceMap,
 meta?: any
);

第一个参数是错误,第二个是结果,第三个是sourcemap,第四个可以是任何内容(比如元数据)

webpack4之如何编写loader的方法步骤

4. this.async

在loader中,如果我们直接调用setTimeout,就会报错,那么如果我们想进行异步操作要怎么做呢?

webpack4之如何编写loader的方法步骤

当要使用异步的时候,需要先把callback变为this.callback,然后再返回结果(和this.callback一样)。

这样再打包就不会有任何问题。

额外知识点:我们现在配置loader的时候,需要使用path.resolve,有没有什么方法可以像其他loader一样引用呢?

webpack4之如何编写loader的方法步骤

这样只写loader名称,webpack就会先到node_modules里面找,找不到就去当前目录下的loaders中去找。

webpack4之如何编写loader的方法步骤

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ext 代码生成器
Aug 07 Javascript
JavaScript中的面向对象介绍
Jun 30 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
Oct 24 Javascript
javascript实现在某个元素上阻止鼠标右键事件的方法和实例
Aug 12 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
May 04 Javascript
JS实现的页面自定义滚动条效果
Oct 26 Javascript
JS实现设置ff与ie元素绝对位置的方法
Mar 08 Javascript
利用transition实现文字上下抖动的效果
Jan 21 Javascript
JQuery实现table中tr上移下移的示例(超简单)
Jan 08 jQuery
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
May 01 Javascript
Vue加载json文件的方法简单示例
Jan 28 Javascript
使用easyui从servlet传递json数据到前端页面的两种方法
Sep 05 Javascript
vue 插件的方法代码详解
Jun 06 #Javascript
jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】
Jun 06 #jQuery
node.js的http.createServer过程深入解析
Jun 06 #Javascript
vue中keep-alive组件的入门使用教程
Jun 06 #Javascript
vue2配置scss的方法步骤
Jun 06 #Javascript
JavaScript中将值转换为字符串的五种方法总结
Jun 06 #Javascript
详解Vue 如何监听Array的变化
Jun 06 #Javascript
You might like
编译问题
2006/10/09 PHP
使PHP自定义函数返回多个值
2006/11/26 PHP
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
2014/01/03 PHP
PHP处理Oracle的CLOB实例
2014/11/03 PHP
JavaScript中String和StringBuffer的速度之争
2010/04/01 Javascript
JS关闭窗口或JS关闭页面的几种代码分享
2013/10/25 Javascript
JS读取XML文件示例代码
2013/11/15 Javascript
JavaScript新窗口与子窗口传值详解
2014/02/11 Javascript
轻量级jQuery插件slideBox实现带底栏轮播(焦点图)代码
2016/03/28 Javascript
原生js编写2048小游戏
2017/03/17 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
vue的全局变量和全局拦截请求器的示例代码
2018/09/13 Javascript
nodejs基础之buffer缓冲区用法分析
2018/12/26 NodeJs
详解@Vue/Cli 3 Invalid Host header 错误解决办法
2019/01/02 Javascript
vue elementUI 表单校验功能之数组多层嵌套
2019/06/04 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
基于javascript实现放大镜特效
2020/12/03 Javascript
用Python的urllib库提交WEB表单
2009/02/24 Python
phpsir 开发 一个检测百度关键字网站排名的python 程序
2009/09/17 Python
Python获取任意xml节点值的方法
2015/05/05 Python
Ubuntu下创建虚拟独立的Python环境全过程
2017/02/10 Python
python实现识别手写数字 python图像识别算法
2020/03/23 Python
Python实现端口检测的方法
2018/07/24 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
django框架中间件原理与用法详解
2019/12/10 Python
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
Win10下用Anaconda安装TensorFlow(图文教程)
2020/06/18 Python
简单掌握CSS3将文字描边及填充文字颜色的方法
2016/03/07 HTML / CSS
使用html2canvas实现浏览器截图的示例代码
2018/01/26 HTML / CSS
班级团队活动方案
2014/08/14 职场文书
怀孕辞职信怎么写
2015/02/28 职场文书
家长会开场白和结束语
2015/05/29 职场文书
运动会通讯稿200字
2015/07/20 职场文书
工作后的感想
2015/08/07 职场文书
外出考察学习心得体会
2016/01/18 职场文书
Python音乐爬虫完美绕过反爬
2021/08/30 Python