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 相关文章推荐
Javascript基础之数组的使用
May 13 Javascript
Jquery删除css属性的简单方法
Dec 04 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
Jul 05 Javascript
Vue2.0如何发布项目实战
Jul 27 Javascript
jQuery:unbind方法的使用详解
Aug 14 jQuery
vue中eventbus被多次触发以及踩过的坑
Dec 02 Javascript
浅谈react受控组件与非受控组件(小结)
Feb 09 Javascript
angular5 子组件监听父组件传入值的变化方法
Sep 30 Javascript
vue data引入本地图片的两种方式小结
Nov 13 Javascript
mpvue微信小程序开发之实现一个弹幕评论
Nov 24 Javascript
Angular封装表单控件及思想总结
Dec 11 Javascript
微信小程序实现列表的横向滑动方式
Jul 15 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
PHP实现定时生成HTML网站首页实例代码
2008/11/20 PHP
第三章 php操作符与控制结构代码
2011/12/30 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
2014/07/29 PHP
PHP版单点登陆实现方案的实例
2016/11/17 PHP
javascript 特殊字符串
2009/02/25 Javascript
巧用jquery解决下拉菜单被Div遮挡的相关问题
2014/02/13 Javascript
javascript实现网页背景烟花效果的方法
2015/08/06 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
jQuery+Ajax实现无刷新分页
2015/10/30 Javascript
js基于myFocus实现轮播图效果
2017/02/14 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
2017/02/19 Javascript
JS实现简单的天数计算器完整实例
2017/04/28 Javascript
[js高手之路]图解javascript的原型(prototype)对象,原型链实例
2017/08/28 Javascript
JavaScript实现换肤功能
2017/09/15 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
深入剖析Express cookie-parser中间件实现示例
2018/02/01 Javascript
详解Angular-ui-BootStrap组件的解释以及使用
2018/07/13 Javascript
vue监听input标签的value值方法
2018/08/27 Javascript
JS面向对象编程基础篇(二) 封装操作实例详解
2020/03/03 Javascript
Vue3 的响应式和以前有什么区别,Proxy 无敌?
2020/05/20 Javascript
解决基于 keep-alive 的后台多级路由缓存问题
2020/12/23 Javascript
[51:07]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python中max函数用法实例分析
2015/07/17 Python
简介Django中内置的一些中间件
2015/07/24 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
2018/07/16 Python
浅谈django orm 优化
2018/08/18 Python
python递归法实现简易连连看小游戏
2020/03/25 Python
Python Django form 组件动态从数据库取choices数据实例
2020/05/19 Python
CSS教程:CSS3圆角属性
2009/04/02 HTML / CSS
html5中svg canvas和图片之间相互转化思路代码
2014/01/24 HTML / CSS
英语专业学生个人求职信范文
2014/01/06 职场文书
迅雷Cued工作心得体会
2014/01/27 职场文书
2014年最新领导班子整改方案
2014/09/27 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
Redis之RedisTemplate配置方式(序列和反序列化)
2022/03/13 Redis
Python OpenCV形态学运算示例详解
2022/04/07 Python