目录

Plugin解决了什么问题

Plugin解决了什么问题:1、提高灵活性和可扩展性;2、降低复杂度;3、提高可重用性;4、简化维护等。提高灵活性和可扩展性是指Plugin机制使得系统的功能可以按需动态加载,可以满足各种业务需求。

一、Plugin解决了什么问题

1、提高灵活性和可扩展性

Plugin机制使得系统的功能可以按需动态加载,可以满足各种业务需求,提高了系统的灵活性和可扩展性。

2、降低复杂度

Plugin通过将不同功能模块拆分成不同的插件,可以使系统更易于管理,避免过多的耦合和依赖关系,降低了系统的复杂度。

3、提高可重用性

Plugin模块可以被多个应用程序或系统所共享使用,可以减少代码的重复编写,提高了可重用性。

4、简化维护

Plugin可以独立开发、测试和部署,可以独立地进行修改和更新,能够简化系统的维护工作。

5、提高安全性

Plugin可以提供额外的安全保障,可以对系统的功能进行更精细的控制和管理,增强了系统的安全性。

二、Plugin概述

1、概念

Plugin(Plug-in)是一种计算机应用程序,它和主应用程序互相交互,以提供特定的功能。是一种遵循一定规范的应用程序接口编写出来的程序,只能运行在程序规定的系统下,因为其需要调用原纯净系统提供的函数库或者数据。webpack中的plugin也是如此,plugin赋予其各种灵活的功能,例如打包优化、资源管理、环境变量注入等,它们会运行在 webpack 的不同阶段(钩子 / 生命周期),贯穿了webpack整个编译周期。

目的在于解决loader无法实现的其他事。

2、配置方式

这里讲述文件的配置方式,一般情况,通过配置文件导出对象中plugins属性传入new实例对象。如下所示:

const HtmlWebpackPlugin = require('html-webpack-plugin'); // 通过 npm 安装
const webpack = require('webpack'); // 访问内置的插件
module.exports = {
  ...
  plugins: [
    new webpack.ProgressPlugin(),
    new HtmlWebpackPlugin({ template: './src/index.html' }),
  ],
};

3、特性

其本质是一个具有apply方法javascript对象,apply方法会被webpack compiler调用,并且在整个编译生命周期都可以访问compiler对象。

const pluginName = 'ConsoleLogOnBuildWebpackPlugin';

class ConsoleLogOnBuildWebpackPlugin {
  apply(compiler) {
    compiler.hooks.run.tap(pluginName, (compilation) => {
      console.log('webpack 构建过程开始!');
    });
  }
}

module.exports = ConsoleLogOnBuildWebpackPlugin;

compiler hook的tap方法的名列前茅个参数,应是驼峰式命名的插件名称,关于整个编译生命周期钩子,有如下:

  • entry-option :初始化 option
  • compile: 真正开始的编译,在创建 compilation 对象之前
  • compilation :生成好了 compilation 对象
  • make:从 entry 开始递归分析依赖,准备对每个模块进行 build
  • after-compile: 编译 build 过程结束
  • emit :在将内存中 assets 内容写到磁盘文件夹之前
  • after-emit :在将内存中 assets 内容写到磁盘文件夹之后
  • done: 完成所有的编译过程
  • failed: 编译失败的时候

4、机制和原理

应用软件提供使插件能够应用的各项服务,其中包括提供加载方式,使插件可以加载到应用程序和网络传输协议中,从而和插件进行数据交换。插件必须依赖于应用程序才能发挥自身功能,仅靠插件是无法正常运行的。相反地,应用程序并不需要依赖插件就可以运行,这样一来,插件就可以加载到应用程序上并且动态更新而不会对应用程序造成任何改变。

简单来说插件技术是能通过在软件的设计和研发过程中把软件的需求和功能进行划分,使程序分为两个主要部分主程序和插件。把基础的功能要求设计在主程序中,另外,主程序还提供与插件的接口,使相应的插件能够按一定的规则进行数据交换,从而实现一些功能;而插件则是一个个实现部分功能的组件,这样通过增减插件或修改插件内部功能来调整软件的功能,由于插件是对独立的部分,可以独立进行编辑。从而实现软件功能的扩展和不断改进。

公开应用程序接口提供一个标准的界面,允许其他人编写插件和应用程序互动。一个稳定的应用程序接口会允许 其他插件正常运行即使其最初的版本有所变动,也会支持插件延长老旧的应用程序的使用寿命。Adobe Photoshop 和After Effects的插件应用程序接口逐渐成为标准,并且被一些和它们竞争的应用程序部分采纳。

5、常见的Plugin

延伸阅读1:插件的种类

  • 文本插件:类似批处理命令的简单插件。
  • 脚本插件:使用一种特殊的脚本语言来实现的插件。
  • 程序插件:利用已有的程序开发环境来制作插件。
一站式研发项目管理平台 PingCode

一站式研发项目管理平台 PingCode

支持敏捷\瀑布、知识库、迭代计划&跟踪、需求、缺陷、测试管理,同时满足非研发团队的流程规划、项目管理和在线办公需要。