📦 插件安装升级

ThinkAdmin 提供完善的插件安装和升级机制,支持多种插件类型和安装方式。

🚀 主要功能

  • 多种插件类型: 支持普通应用插件和高级应用插件
  • 自动安装: 基于 ThinkInstall 的自动安装机制
  • 依赖管理: 自动处理插件依赖关系
  • 配置初始化: 自动初始化插件配置文件
  • 灵活安装: 支持自定义安装位置
  • 安全卸载: 提供安全的插件卸载机制

⚠️ 重要提示

授权协议: 在安装插件前,请仔细阅读应用插件的授权协议,确保您符合使用条件。

文档遵循: 请遵循各插件的说明文档,按照相关指令进行操作。

📋 插件类型

普通应用插件

  • 安装位置: vendor/package 目录下
  • 代码分离: 不占用 app 下的应用目录
  • 结构清晰: 插件与应用代码分离
  • 维护简单: 提高代码结构的清晰度和可维护性

高级应用插件

  • 自定义位置: 可安装到 app 目录下的应用目录
  • 灵活配置: 根据项目需求灵活配置安装位置
  • 自毁机制: 安装后自动清理临时文件
  • 完全控制: 用户拥有更多的控制权

⚙️ 安装机制

基于 ThinkInstall

  • 无需直接安装: 高级插件无需直接安装
  • 依赖配置: 通过配置应用插件的依赖关系完成安装
  • 便捷管理: 提供更便捷、更灵活的插件管理方式
  • 扩展性强: 进一步提升应用的扩展性和可维护性

普通应用插件

系统的插件机制明确了普通应用插件的安装位置。这些插件将安装在 vendor/package 目录下,不会占用 app 下的应用目录。这样的设计使得插件与应用代码分离,提高了代码结构的清晰度和可维护性。

为了更好地支持插件的安装和配置,系统引入了插件安装器。这个工具可以初始化插件的配置文件及资源文件,确保插件能够正确地集成到系统中。通过插件服务类的注册,插件的初始化过程得到了简化和自动化,降低了开发者的操作难度。

在安装插件后,系统不再需要执行“自毁”操作。这意味着安装器会自动处理必要的文件和配置,开发者无需额外关注这些细节。这一改进提高了插件安装的效率,减少了出错的可能性。

当需要卸载插件时,通常可以使用 composer remove 命令进行操作。然而,需要注意的是,数据库及部分配置或资源文件可能需要手动删除。这是因为这些文件和数据库记录可能包含重要的业务数据,需要开发者根据实际情况进行判断和处理。

高级应用插件

为了提升插件安装的灵活性和自定义性,系统引入了插件安装器的新特性。该安装器允许用户将插件代码安装到 app 目录下的应用目录或其他自定义目录,而非默认组件安装目录。这一改变赋予了开发者更大的自主权,可以根据项目实际需求灵活配置插件的安装位置。

在插件安装完成后,特别设计了一个“自毁”机制。通过调用这一机制,插件安装器会移除除应用目录下代码外的所有临时文件和辅助结构,确保只保留必要的代码。这一功能有助于减少冗余文件,保持项目结构的清晰和整洁。

值得注意的是,传统的 composer remove 命令并不能完全卸载该插件。在执行该命令后,用户仍需要手动删除应用目录下的插件代码以及相关的数据库等。这是因为我们希望保留更多的控制权在用户手中,确保在卸载插件时能够彻底清除所有相关文件和配置,避免留下任何可能的隐患。

插件安装配置

通过配置应用插件 composer.jsonextra.plugin 参数,实现将应用插件的文件复制到指定的某个目录,或者将原安装目录清理删除。

  • 初始生成文件:extra.plugin.init 初始化文件,若文件存在则不进行操作,数据为 Object
  • 复制目录文件:extra.plugin.copy 执行文件或目录复制操作,支持 增量复制绝对复制 两种模式,数据为 Object
  • 删除安装目录:extra.plugin.clear 清空并删除原安装仓库目录,主要用于清理安装后不再使用的组件,数据为 true
  • 安装卸载事件:extra.plugin.event 指向静态 File:Class 名称,已支持静态 onRemoveonInstall 事件,仅支持原生代码。
  • 复制安装类型的插件,可以不配置 autoload 规则,但要注意 copy 后放置的文件位置符合已有 autoload 自动加载规则。

复制操作的注意事项:

  1. 如果目标目录下存在 ignore 文件,则会跳转该复制操作;
  2. 如果目标位置是以 ! 开头则表示 绝对复制,会先删除目标再进行复制操作;

📋 插件配置参数详解

extra.plugin 配置说明

  • init: 初始化文件配置,若文件存在则不进行操作
  • copy: 执行文件或目录复制操作,支持增量复制和绝对复制
  • clear: 清空并删除原安装仓库目录
  • event: 指向静态 File:Class 名称,支持 onRemove 和 onInstall 事件

复制操作注意事项

  1. 如果目标目录下存在 ignore 文件,则会跳过该复制操作
  2. 如果目标位置以 ! 开头则表示绝对复制,会先删除目标再进行复制操作

插件 composer.json 配置案例

{
  "type": "think-admin-plugin",
  "name": "zoujingli/think-plugs-admin",
  "version": "1.0.0",
  "license": "MIT",
  "homepage": "https://thinkadmin.top",
  "description": "Admin Plugin for ThinkAdmin",
  "authors": [
    {
      "name": "Anyon",
      "email": "zoujingli@qq.com"
    }
  ],
  "require": {
    "php": ">7.1",
    "ext-json": "*",
    "topthink/framework": "^6.0|^8.0",
    "topthink/think-view": "^1.0|^2.0",
    "zoujingli/ip2region": "^1.0|^2.0|@dev",
    "zoujingli/think-install": "^1.0|@dev",
    "zoujingli/think-library": "^6.1|@dev",
    "zoujingli/think-plugs-static": "^1.0|@dev"
  },
  "autoload": {
    "psr-4": {
      "app\\admin\\": "src"
    }
  },
  "extra": {
    "config": {
      "type": "module",
      "name": "系统后台管理",
      "document": "https://thinkadmin.top/plugin/think-plugs-admin.html",
      "description": "后台基础管理模块,系统账号及安全配置管理。"
    },
    "plugin": {
      "copy": {
        "stc/database": "database/migrations"
      }
    },
    "think": {
      "services": [
        "app\\admin\\Service"
      ]
    }
  }
}

🔧 安装命令示例

标准安装

# 安装前建议更新所有组件
composer update --optimize-autoloader

# 安装插件
composer require zoujingli/think-plugs-admin

开发版本安装

# 安装开发版本
composer require zoujingli/think-plugs-admin dev-master

插件卸载

# 卸载插件(注意:不会删除数据表和代码)
composer remove zoujingli/think-plugs-admin
最近更新:
Contributors: 邹景立