复习webpack4之如何编写loader

以前学习过webpack3的知识,可是webpack4升级后仍是有不少变更的,因此此次从新整理一下webpack4的知识点,方便之后复习。node

此次学习webpack4不单单要会配置,记住核心API,最好还要理解一下webpack更深层次的知识,好比打包原理等等,因此可能会省略一些比较基础的内容,可是但愿我能够经过这次学习掌握webpack,更好地应对之后的工做。webpack

1.编写入门级loader

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

首先初始化一个项目npm

npm init
复制代码

而后安装依赖bash

cnpm install -D webpack webpack-cli
复制代码

建立一个src目录,里面建立一个index.js异步

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

若是此时,咱们有个需求,中打包过程当中,须要把world替换成mark,咱们就能够借助loader来实现。首先在src同级目录新建一个loader文件夹,里面新建一个replaceLoader.js。函数

replaceLoader.js须要导出一个函数,注意:这个函数不能是箭头函数,由于webpack调用loader的时候会对this作一些变动,上面有一些方法,若是使用箭头函数,this指向就会有问题,没有办法调用this上的一些方法。学习

函数能够接受一个参数,参数是咱们源代码的内容,因此能够对source进行操做后,return source,就能够改变源代码了。ui

而后使用咱们本身写的loader,use就不填写loader名称了,须要写咱们编写的loader的路径。

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

2.给loader配置参数

loader中经常能够配置一些参数,那么咱们若是想配置参数,要怎么作呢?

此时在replaceLoader中,能够经过this.query访问到参数。

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

cnpm install --save-dev loader-utils
复制代码

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

3.this.callback

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

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

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

4. this.async

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

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

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

额外知识点:咱们如今配置loader的时候,须要使用path.resolve,有没有什么方法能够像其余loader同样引用呢?

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

相关文章
相关标签/搜索