以前学习过webpack3的知识,可是webpack4升级后仍是有不少变更的,因此此次从新整理一下webpack4的知识点,方便之后复习。node
此次学习webpack4不单单要会配置,记住核心API,最好还要理解一下webpack更深层次的知识,好比打包原理等等,因此可能会省略一些比较基础的内容,可是但愿我能够经过这次学习掌握webpack,更好地应对之后的工做。webpack
我在以前的文章中,已经把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。
loader中经常能够配置一些参数,那么咱们若是想配置参数,要怎么作呢?
此时在replaceLoader中,能够经过this.query访问到参数。
这样打包后,结果就会替换成咱们的参数,可是官方推荐咱们使用loader-utils来传参。
cnpm install --save-dev loader-utils
复制代码
这样打包的结果也是咱们传入的参数。
有时候咱们不止要return一个resource,还可能要返回多个结果,就须要用到callback。
this.callback(
err: Error | null,
content: string | Buffer,
sourceMap?: SourceMap,
meta?: any
);
复制代码
第一个参数是错误,第二个是结果,第三个是sourcemap,第四个能够是任何内容(好比元数据)
在loader中,若是咱们直接调用setTimeout,就会报错,那么若是咱们想进行异步操做要怎么作呢?
当要使用异步的时候,须要先把callback变为this.callback,而后再返回结果(和this.callback同样)。
这样再打包就不会有任何问题。
额外知识点:咱们如今配置loader的时候,须要使用path.resolve,有没有什么方法能够像其余loader同样引用呢?
这样只写loader名称,webpack就会先到node_modules里面找,找不到就去当前目录下的loaders中去找。