插件安装升级
在安装和升级应用插件时,请遵循各插件的说明文档,按照相关指令进行操作。在执行之前,务必仔细阅读应用插件的授权协议,确保您符合使用条件。 应用插件基于自定义插件安装器 ThinkInstall 实现,这一高级插件无需直接安装。通过配置应用插件的依赖关系,即可完成安装过程。与普通应用插件相比,ThinkInstall 提供了更便捷、更灵活的插件管理方式。它能帮助您快速集成和管理插件,进一步提升应用的扩展性和可维护性。
普通应用插件
系统的插件机制明确了普通应用插件的安装位置。这些插件将安装在 vendor/package
目录下,不会占用 app
下的应用目录。这样的设计使得插件与应用代码分离,提高了代码结构的清晰度和可维护性。
为了更好地支持插件的安装和配置,系统引入了插件安装器。这个工具可以初始化插件的配置文件及资源文件,确保插件能够正确地集成到系统中。通过插件服务类的注册,插件的初始化过程得到了简化和自动化,降低了开发者的操作难度。
在安装插件后,系统不再需要执行“自毁”操作。这意味着安装器会自动处理必要的文件和配置,开发者无需额外关注这些细节。这一改进提高了插件安装的效率,减少了出错的可能性。
当需要卸载插件时,通常可以使用 composer remove
命令进行操作。然而,需要注意的是,数据库及部分配置或资源文件可能需要手动删除。这是因为这些文件和数据库记录可能包含重要的业务数据,需要开发者根据实际情况进行判断和处理。
高级应用插件
为了提升插件安装的灵活性和自定义性,系统引入了插件安装器的新特性。该安装器允许用户将插件代码安装到 app
目录下的应用目录或其他自定义目录,而非默认组件安装目录。这一改变赋予了开发者更大的自主权,可以根据项目实际需求灵活配置插件的安装位置。
在插件安装完成后,特别设计了一个“自毁”机制。通过调用这一机制,插件安装器会移除除应用目录下代码外的所有临时文件和辅助结构,确保只保留必要的代码。这一功能有助于减少冗余文件,保持项目结构的清晰和整洁。
值得注意的是,传统的 composer remove
命令并不能完全卸载该插件。在执行该命令后,用户仍需要手动删除应用目录下的插件代码以及相关的数据库等。这是因为我们希望保留更多的控制权在用户手中,确保在卸载插件时能够彻底清除所有相关文件和配置,避免留下任何可能的隐患。
插件安装配置
通过配置应用插件 composer.json
的 extra.plugin
参数,实现将应用插件的文件复制到指定的某个目录,或者将原安装目录清理删除。
- 初始生成文件:
extra.plugin.init
初始化文件,若文件存在则不进行操作,数据为Object
; - 复制目录文件:
extra.plugin.copy
执行文件或目录复制操作,支持 增量复制 和 绝对复制 两种模式,数据为Object
; - 删除安装目录:
extra.plugin.clear
清空并删除原安装仓库目录,主要用于清理安装后不再使用的组件,数据为true
; - 安装卸载事件:
extra.plugin.event
指向静态File
:Class
名称,已支持静态onRemove
和onInstall
事件,仅支持原生代码。 - 复制安装类型的插件,可以不配置
autoload
规则,但要注意copy
后放置的文件位置符合已有autoload
自动加载规则。
复制操作的注意事项:
- 如果目标目录下存在
ignore
文件,则会跳转该复制操作; - 如果目标位置是以
!
开头则表示 绝对复制,会先删除目标再进行复制操作;
插件 composer.json
配置案例如下:
{
"type": "think-admin-plugin",
"name": "zoujingli/think-plugs-admin",
"extra": {
"config": {
"type": "module",
"name": "系统后台管理"
},
"plugin": {
"copy": {
"stc/database": "database/migrations"
}
},
"think": {
"services": [
"app\\admin\\Service"
]
}
},
"autoload": {
"psr-4": {
"app\\admin": "src"
}
}
}