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 相关文章推荐
Div自动滚动到末尾的代码
Oct 26 Javascript
javascript重写alert方法的实例代码
Mar 29 Javascript
js中定义一个变量并判断其是否为空的方法
May 13 Javascript
再谈javascript原型继承
Nov 10 Javascript
node.js中的fs.futimesSync方法使用说明
Dec 17 Javascript
在for循环中length值是否需要缓存
Jul 27 Javascript
jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
Nov 25 Javascript
浏览器调试动态js脚本的方法(图解)
Jan 19 Javascript
vue 父组件调用子组件方法及事件
Mar 29 Javascript
vue新vue-cli3环境配置和模拟json数据的实例
Sep 19 Javascript
详解一些适用于Node.js的命名约定
Dec 08 Javascript
js实现弹框效果
Mar 24 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
关于我转生变成史莱姆这档事:第二季PV上线,萌王2021年回归
2020/05/06 日漫
php正则校验用户名介绍
2008/07/19 PHP
PHP实现手机归属地查询API接口实现代码
2012/08/27 PHP
php简单构造json多维数组的方法示例
2017/06/08 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
解决extjs在firefox中关闭窗口再打开后iframe中js函数访问不到的问题
2008/11/06 Javascript
JavaScript 基础篇(一)
2012/03/30 Javascript
js定时器(执行一次、重复执行)
2014/03/07 Javascript
复杂的javascript窗口分帧解析
2016/02/19 Javascript
深入解析jQuery中Deferred的deferred.promise()方法
2016/05/03 Javascript
基于Bootstrap的后台管理面板 Bootstrap Metro Dashboard
2016/06/17 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
js时间戳格式化成日期格式的多种方法介绍
2017/02/16 Javascript
基于vue2的table分页组件实现方法
2017/03/20 Javascript
图解Javascript——作用域、作用域链、闭包
2017/03/21 Javascript
基于Swiper实现移动端页面图片轮播效果
2017/12/28 Javascript
[原创]jquery判断元素内容是否为空的方法
2018/05/04 jQuery
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
2018/12/11 Javascript
vue实现todolist功能、todolist组件拆分及todolist的删除功能
2019/04/11 Javascript
[00:14]PWL:老朋友Mushi拍VLOG与中国玩家问好
2020/11/04 DOTA
Python中属性和描述符的正确使用
2016/08/23 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
2018/06/11 Python
从运行效率与开发效率比较Python和C++
2018/12/14 Python
tensor和numpy的互相转换的实现示例
2019/08/02 Python
python+openCV调用摄像头拍摄和处理图片的实现
2019/08/06 Python
浅析PyTorch中nn.Linear的使用
2019/08/18 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
2020/06/12 Python
Python爬虫设置ip代理过程解析
2020/07/20 Python
使用CSS3的appearance属性改变任何元素的浏览器默认风格
2012/12/24 HTML / CSS
集团薪酬管理制度
2014/01/13 职场文书
干部考核评语
2014/04/29 职场文书
七一慰问简报
2015/07/20 职场文书
运动会报道稿大全
2015/07/23 职场文书
2016年“抗战胜利纪念日”71周年校园广播稿
2015/12/18 职场文书
合作协议书格式范本
2016/03/21 职场文书
正确使用MySQL update语句
2021/05/26 MySQL