当前位置: 首页 > 网络应用技术

WebPack高级:实现从0到1的插头-in

时间:2023-03-08 00:31:57 网络应用技术

  GitHub源代码地址与插件-IN,NPM库地址相对应

  WebPack的工作流就像生产流线一样。在转换为输出结果之前,需要通过一系列处理过程来处理源文件。汇编线上的EAWH处理过程是单个职责,并且该过程和过程之间存在依赖关系。只有在完成当前过程后,才能处理下一个过程。

  插头 - 只是插入装配线中的附加处理过程。此插入的位置是特别的。可以以与核心函数密不可分的有序方式实现此汇编线,WebPack通过IT组织汇编线。WebPack将在操作过程中的某些特定时间内广播某些事件,并且可以将插头-in添加到装配线中,以监视这些事件。

  让我们看看我们需要的插件是什么样子:

  这是一个官方的例子。

  它包含当前模块资源,编译和生成资源,更改等。当WebPack以开发模式运行时,每当检测到文件更改时,都会创建一个新的拟议。此实例提供了许多事件来调整插件-in扩展,它还可以通过它访问编译器对象。

  如前所述,运行时将应用方法注入编译器实例。本实例可以调用钩子对象以注册各种钩子,例如上述示例的汇编。这里的汇编是钩子的名称。TAP定义挂钩的呼叫方法。Webpack的插头系统是基于此模型构建的。

  钩子的核心逻辑来自可敲击。Tapable Warehouse公开了很多钩类,可用于为插件创建钩子

  不同类型的钩子还将根据其同步异步(是否并行和其他属性)以及需要根据这些特征编写不同交互逻辑的开发人员,导致不同的呼叫方法。

  所有挂钩构造仪都会收到一个可选参数,即字符串列表。

  最好的做法是在钩子属性中披露的所有钩子:

  使用如下:

  基本性质的示例通常在Webpack中看到,而Tapable并不那么复杂。可容纳基于Releaster-Subscription模式,本质上是各种功能逻辑。

  因此,Tapable将遵循使用Release-Subscription模式的规则:

  //创建钩实例const print = new Synchok();

  //调用订阅接口以注册callback print.tap('error',()=> {console.log('error'');});})

  //调用发布界面以触发callback print.call();//'

  第二:调用wepback将配置对象(即经常被修补的配置文件导出的对象)传递到wepback。如果同时传递回调函数,则将在编译器运行时执行回调。

  其中,错误对象仅包括与WEPBACK相关的问题,例如配置错误。它不包含编译错误,因此STATS.Haserror必须用于单独处理。

  第三:调用返回的编译器实例

  如果您不通过回调函数,则在调用WebPack().compiler实例之后,您将返回一个编译器实例,基本上仅执行最小功能以维护生命周期的功能。注册插头-in。

  如上所述,编译器实例上的挂钩属性用于在编译器生命周期中为所有钩子事件注册插头。

  编译器实例提供了两种方法:

  compiler.run(((err,stats)=> {});

  手表方法返回一个观看实例,该实例将暴露出一种结束监视的密切方法。

  回到主题,首先使用上面介绍的方法在开发此插件之前创建测试用例。

  main.js简单地写两个句子

  测试用例非常简单,您可以一目了然地理解。目标是在Dist目录中包装的捆绑包中的补充,它还需要一个包含版本信息的文件

  首先创建插件模板

  该插件仅在生产环境中使用,有两种常用的方法来验证环境

  有些人会问,可以直接用作回报吗?

  是的,这是指向的著名点。我使用箭头函数避免了这个方向。

  第三 - 确定版本结构的最简单结构。txt是指我们只需要最新提交的最新提交记录

  使用child_process

  在Node.js中,您可以使用创建过程执行GIT命令以获得执行结果。这段时间使用的方法:

  此方法将得出外壳,然后在外壳中执行以缓冲任何生成的输出。接收三个参数:

  获取git信息

  输出

  最终结果启动应用程序后,您可以在访问时查看版本信息

  留下问题:是否有安装插件的订单要求?请告知评论区域!

  创建并不容易,请喜欢您的手指。

  原始海报Github,如果您喜欢的话,请点击星星,这也是作者的鼓励

  原始:https://juejin.cn/post/709852668742759431