本文档详细介绍 lib/plugin.sh 模块提供的插件 API。
plugin.sh 提供插件管理功能:
- 插件发现和加载
- 插件依赖管理
- 钩子注册和执行
- 插件验证
declare -gA PLUGINS=() # 插件路径映射
declare -gA PLUGIN_META=() # 插件元数据
declare -gA PLUGIN_DEPS=() # 插件依赖
declare -gA PLUGIN_PACKAGES=() # 插件系统包
declare -ga PLUGIN_DIRS=() # 插件搜索目录
declare -ga LOADED_PLUGINS=() # 已加载插件列表初始化插件系统。
plugin_init示例:
plugin_init添加插件搜索目录。
plugin_add_dir <directory>参数:
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
| directory | string | 是 | 目录路径 |
示例:
plugin_add_dir "/custom/plugins"发现所有插件。
plugin_discover示例:
plugin_discover加载指定插件。
plugin_load <name>参数:
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
| name | string | 是 | 插件名称 |
返回值:
0- 加载成功1- 加载失败
示例:
plugin_load "java"加载所有发现的插件。
plugin_load_all示例:
plugin_load_all重新加载插件。
plugin_reload <name>参数:
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
| name | string | 是 | 插件名称 |
示例:
plugin_reload "java"卸载插件。
plugin_unload <name>参数:
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
| name | string | 是 | 插件名称 |
示例:
plugin_unload "java"检查插件是否已加载。
plugin_is_loaded <name>参数:
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
| name | string | 是 | 插件名称 |
返回值:
0- 已加载1- 未加载
示例:
if plugin_is_loaded "java"; then
echo "Java 插件已加载"
fi列出所有插件。
plugin_list [verbose]参数:
| 参数 | 类型 | 必需 | 默认值 | 说明 |
|---|---|---|---|---|
| verbose | string | 否 | false | 是否详细输出 |
示例:
plugin_list "false"
plugin_list "true"获取插件版本。
plugin_get_version <name>参数:
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
| name | string | 是 | 插件名称 |
返回值:
插件版本字符串。
示例:
version=$(plugin_get_version "java")获取插件描述。
plugin_get_description <name>参数:
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
| name | string | 是 | 插件名称 |
返回值:
插件描述字符串。
示例:
desc=$(plugin_get_description "java")获取插件命令依赖。
plugin_get_dependencies <name>参数:
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
| name | string | 是 | 插件名称 |
返回值:
依赖列表(逗号分隔)。
示例:
deps=$(plugin_get_dependencies "java")获取插件系统包依赖。
plugin_get_packages <name>参数:
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
| name | string | 是 | 插件名称 |
返回值:
系统包列表(逗号分隔)。
示例:
pkgs=$(plugin_get_packages "java")检查插件是否有系统包依赖。
plugin_has_packages <name>参数:
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
| name | string | 是 | 插件名称 |
返回值:
0- 有系统包依赖1- 无系统包依赖
示例:
if plugin_has_packages "java"; then
echo "Java 插件需要安装系统包"
fi检查插件依赖是否满足。
plugin_check_dependencies <name>参数:
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
| name | string | 是 | 插件名称 |
返回值:
0- 依赖满足1- 依赖缺失
示例:
if ! plugin_check_dependencies "java"; then
echo "缺少依赖"
fi安装插件依赖。
plugin_install_dependencies <name>参数:
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
| name | string | 是 | 插件名称 |
示例:
plugin_install_dependencies "java"安装插件系统包。
plugin_install_packages <name>参数:
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
| name | string | 是 | 插件名称 |
示例:
plugin_install_packages "java"安装所有插件的系统包。
plugin_install_all_packages示例:
plugin_install_all_packages注册钩子函数。
register_hook <hook_type> <plugin_name> <hook_func>参数:
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
| hook_type | string | 是 | 钩子类型 |
| plugin_name | string | 是 | 插件名称 |
| hook_func | string | 是 | 钩子函数名 |
示例:
register_hook "pre_build" "java" "java_pre_build"
register_hook "post_build" "java" "java_post_build"执行指定类型的所有钩子。
run_hooks <hook_type> [args...]参数:
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
| hook_type | string | 是 | 钩子类型 |
| args | any | 否 | 钩子参数 |
返回值:
0- 所有钩子执行成功1- 有钩子执行失败
示例:
run_hooks "pre_build" "build"
run_hooks "post_build"执行 pre_build 钩子。
run_pre_build_hooks [target]参数:
| 参数 | 类型 | 必需 | 默认值 | 说明 |
|---|---|---|---|---|
| target | string | 否 | "" | 目标名称 |
示例:
run_pre_build_hooks "build"执行 post_build 钩子。
run_post_build_hooks [target]示例:
run_post_build_hooks "build"执行错误钩子。
run_error_hooks [target]示例:
run_error_hooks "build"执行清理钩子。
run_clean_hooks示例:
run_clean_hooks