npm 包 tapable-proxy 使用教程

什么是 tapable-proxy?

tapable-proxy 是一个 Tapable 钩子的代理包装工具,它可以通过该工具,更方便地添加和删除钩子,并且可以提供一些常用的钩子的封装,使 Tapable 的使用更加简便。

使用方法

安装

使用 npm 命令进行安装:

引入

在项目中使用引入 Tapable 和 tapable-proxy:

import Tapable from 'tapable';
import TapableProxy from 'tapable-proxy';

或者可以使用 CommonJS 的方式:

const Tapable = require('tapable');
const TapableProxy = require('tapable-proxy');

基本使用

tapable-proxy 提供了两个类:Hook 和 Plugin,Hook 代表了一个钩子,类似于 Tapable 中的 Hook,Plugin 则代表了一个插件。

const { Hook, Plugin } = TapableProxy;

下面我们来看一下如何使用它们。

Hook

创建一个 Hook,首先我们需要定义一个钩子名称:

const myHook = new Hook('myHook');

我们可以通过 tap 方法向钩子添加一个函数:

myHook.tap('myPlugin1', () => {
  console.log('myPlugin1');
});

myHook.tap('myPlugin2', () => {
  console.log('myPlugin2');
});

通过 call 方法触发这个钩子,它会按照添加的函数的顺序依次执行:

myHook.call();

输出结果为:

Plugin

我们还需要使用 Plugin 来添加和删除钩子。

首先创建一个 Plugin:

const myPlugin = new Plugin('myHook');

使用 apply 方法添加一个函数:

myPlugin.apply(() => {
  console.log('hello world');
});

现在,我们再次触发钩子:

myHook.call();

此时,输出结果为:

我们也可以使用 remove 方法来从钩子上删除一个函数:

myPlugin.remove();

再次触发钩子:

myHook.call();

此时,输出结果为:

常用的钩子封装

tapable-proxy 还提供了一些常用钩子和插件的封装。

AsyncSeriesHook

AsyncSeriesHook 是一个用于异步串行调用的钩子,tapable-proxy 中提供了它的封装:

const { AsyncSeriesHookProxy } = TapableProxy;
const myAsyncSeriesHook = new AsyncSeriesHookProxy('myAsyncSeriesHook');

myAsyncSeriesHook.tap('myPlugin1', async () => {
  console.log('myPlugin1');
  return Promise.resolve();
});

myAsyncSeriesHook.tap('myPlugin2', async () => {
  console.log('myPlugin2');
  return Promise.resolve();
});

myAsyncSeriesHook.callAsync(() => {
  console.log('callback');
});

上面的例子中,我们使用 AsyncSeriesHookProxy 封装了一个 AsyncSeriesHook。

使用 tap 方法向钩子添加函数,使用 callAsync 方法触发钩子。

最后一个参数是回调函数,当钩子全部执行完毕后,会调用该回调函数。

SyncHook

SyncHook 是一个用于同步调用的钩子,tapable-proxy 中提供了它的封装:

const { SyncHookProxy } = TapableProxy;
const mySyncHook = new SyncHookProxy('mySyncHook');

mySyncHook.tap('myPlugin1', () => {
  console.log('myPlugin1');
});

mySyncHook.tap('myPlugin2', () => {
  console.log('myPlugin2');
});

mySyncHook.call();

使用 SyncHookProxy 封装了一个 SyncHook。

使用 tap 方法向钩子添加函数,使用 call 方法触发钩子。

其他钩子

以上只是 tapable-proxy 封装的两个常用钩子,除此之外,tapable-proxy 还提供了以下钩子的封装:

  • AsyncParallelHook
  • AsyncParallelBailHook
  • AsyncSeriesLoopHook
  • AsyncSeriesWaterfallHook
  • SyncBailHook

你可以通过阅读 tapable-proxy 的文档,学习更多的钩子的使用方法。

深度学习

在实际开发中,我们经常需要使用 Tapable 工具去扩展和修改 webpack 的行为。而 tapable-proxy 更是能帮助我们更加便捷地使用 Tapable 工具。

使用 tapable-proxy,你可以简化 Tapable 的 API,并且使用它提供的封装好的钩子。

通过使用 tapable-proxy,你可以将更多精力放在扩展和修改 webpack 的行为上,而不用像使用 Tapable 的时候那样需要关注各种 API 的使用方法。

结语

通过本文的介绍,你学习了如何使用 tapable-proxy 来更方便地使用 Tapable 工具,并且了解了 tapable-proxy 提供的一些常用的钩子的封装示例。

希望本文能对你的前端开发提供一些帮助。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/600673e2fb81d47349e53e1a


纠错
反馈