插件安装升级
应用插件的安装与升级需要根据各插件的说明文档,执行相应的指令进行安装或更新,请仔细阅读应用插件的授权协议。
应用插件是基于自定义插件安装器 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
配置案例如下:
{
"name": "your/package",
"type": "think-admin-plugin",
"extra": {
"plugin": {
"copy": {
"src": "!app/admin",
"stc/database": "database/migrations"
},
"clear": true,
"event": {
// 事件类名: 文件相对安装包位置
"src/Script.php": "plugin\\wuma\\Plugin"
}
},
"think": {
"services": [
"app\\admin\\Service"
]
}
}
}