webpack

一、loader&plugin

  1. loader它是一个转换器,它只专注于转换这一个领域,例如babel-loader能将ES6+的代码转换为ES5或以下,以此来保证兼容性,那么它是运行在打包之前的。
  2. plugin可能运行在打包之前,也可能运行在打包的过程中,或者打包完成之后。总之,它不局限于打包,资源的加载,还有其它的功能。所以它是在整个编译周期都起作用。
    3.常用的loader:
  1. 常用的plugin:

clean-webpack-plugin插件会在我们每次打包之前自动清理掉旧的dist文件夹,

二、自定义plugin

  1. compiler 对象代表了完整的 webpack 环境配置。
  2. compilation 对象代表了一次资源版本构建。
    过程:
//创建一个构造函数
function No1WebpackPlugin (options) {
  this.options = options
}
//重写构造函数原型对象上的 apply 方法
No1WebpackPlugin.prototype.apply = function (compiler) {
  compiler.hooks.done.tap('No1', () => {
    console.log(this.options.msg)
  })
}
//3. 将我们的自定义插件导出
module.exports = No1WebpackPlugin;

让我们来拆分一下compiler.hooks.done.tap('No1', () => {}):

拆分过程

3种触发compiler钩子的方法:tap、tapAsync、tapPromise

根据钩子所属的类型(9种)选择不同的触发方法(同步、异步、promise)

  • tap:可以注册同步钩子也可以注册异步钩子
  • tapAsync:回调方式注册异步钩子
  • tapPromise:Promise方式注册异步钩子,回调函数中只需要一个参数compilation,不需要再调用一下cb()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容