前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >webpack 第三篇(tapable\compiler\compilation)

webpack 第三篇(tapable\compiler\compilation)

作者头像
菜的黑人牙膏
发布2019-01-21 16:17:58
2.4K0
发布2019-01-21 16:17:58
举报

webpack流程可参考:http://taobaofed.org/blog/2016/09/09/webpack-flow/            https://zoumiaojiang.com/article/what-is-real-webpack-plugin/

Tapable:

Tapable事实上就是一个事件管理器,类似于 NodeJS 的 EventEmitter 类,专注于自定义事件的触发和处理。

Tapable 有四组成员函数:

  1. plugin(name:string, handler:function):允许将一个自定义插件注册到 Tapable 实例 的事件中。它的行为和 EventEmitter 的 on() 方法相似,用来注册一个处理函数/监听器,来在信号/事件发生时做一些事情。
  2. apply(…pluginInstances: (AnyPlugin|function)[])AnyPlugin 应该是一个拥有 apply 方法的类(也可以是一个对象,但是不常见),或者只是一个包含注册代码的函数。这个方法只调用插件的定义,从而将真正的事件监听器可以注册到 Tapable 实例的注册列表中。
  3. applyPlugins*(name:string, …)Tapable 实例可以通过使用这些函数,在指定的 hash 下应用所有的插件。这一组方法的行为和 EventEmitter 的 emit() 方法相似,使用多种策略细致地控制事件的触发。
  4. mixin(pt: Object):一个简单地方法,使用混入而不是继承的方式扩展 Tapable 的原型

Compier:

Compiler 也是我们所说的 Tapable 实例,他就是webpack的整体环境。通过这种实现机制,我们可以理解为,它混合(mix)了 Tapable类,来使实例也具备注册和调用插件功能。

插件机制事实上就是通过注册在Complier上,在运行时Compier会根据各种事件钩子,从而触发插件的注册函数。

Compilation:

Compilation 实例继承于 compiler。例如,compiler.compilation 是对所有 require 图(graph)中对象的字面上的编译。这个对象可以访问所有的模块和它们的依赖(大部分是循环依赖)。在编译阶段,模块被加载,封闭,优化,分块,哈希和重建等等。这将是任何编译操作中,重要的生命周期。

官方文档看起来比较难理解,compilation 对象代表了一次单一的版本构建和生成资源。当运行 webpack 开发环境中间件时,每当检测到一个文件变化,一次新的编译将被创建,从而生成一组新的编译资源。一个编译对象表现了当前的模块资源、编译生成资源、变化的文件、以及被跟踪依赖的状态信息。编译对象也提供了很多关键点回调供插件做自定义处理时选择使用。

两者之间的区别:

  • compiler 对象代表的是不变的webpack环境,是针对webpack的
  • compilation 对象针对的是随时可变的项目文件,只要文件有改动,compilation就会被重新创建。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档