Skip to content

插件目录结构

以hello_world插件为例,详细介绍插件的标准目录结构及其功能说明,为插件开发者提供参考指南。

插件目录结构

每个插件都有一个以插件标识命名的根目录,如hello_world。插件根目录包含以下主要文件和子目录:

plaintext
├─niucloud/                                     # niucloud-admin框架目录
│  ├─addon/                                     # 插件目录
│  │  ├─hello_world/                            # hello World插件
│  │  │  ├─admin/                               # 管理端前端目录
│  │  │  │  ├──api/                             # 管理端API接口定义
│  │  │  │  ├──assets/                          # 静态资源文件
│  │  │  │  ├──lang/                            # 前端语言包
│  │  │  │  ├──layout/                          # 布局组件
│  │  │  │  └──views/                           # 页面视图
│  │  │  ├─app/                                 # 后端业务代码
│  │  │  │  ├──adminapi/                        # 管理端API
│  │  │  │  │   ├──controller/                  # 控制器层,处理管理端请求
│  │  │  │  │   └──route/                       # 路由配置,定义管理端API路由
│  │  │  │  ├──api/                             # 前端API(移动端/web端共用)
│  │  │  │  │   ├──controller/                  # 控制器层,处理前端请求
│  │  │  │  │   └──route/                       # 路由配置,定义前端API路由
│  │  │  │  ├──dict/                            # 字典定义
│  │  │  │  ├──job/                             # 定时任务
│  │  │  │  ├──lang/                            # 后端语言包
│  │  │  │  ├──listener/                        # 事件监听器
│  │  │  │  ├──model/                           # 数据模型
│  │  │  │  ├──service/                         # 业务服务层
│  │  │  │  │   ├──admin/                       # 管理端服务
│  │  │  │  │   ├──api/                         # 前端服务
│  │  │  │  │   └──core/                        # 核心服务
│  │  │  │  ├──upgrade/                         # 升级脚本
│  │  │  │  ├──validate/                        # 验证规则
│  │  │  │  └──event.php                        # 事件定义
│  │  │  ├─compile/                             # 编译目录
│  │  │  │  ├──admin/                           # 管理端编译目录
│  │  │  │  ├──aliapp/                          # 移动端编译目录
│  │  │  │  ├──wap/                             # 移动端编译目录
│  │  │  │  ├──weapp/                           # 小程序编译目录
│  │  │  │  └──web/                             # web端编译目录
│  │  │  ├─package/                             # 依赖包,系统安装时会自动安装依赖包
│  │  │  │  ├──admin-package.json               # admin端口的依赖包
│  │  │  │  ├──composer.json                    # 主应用依赖包
│  │  │  │  ├──uni-app-package.json             # uni-app端依赖包
│  │  │  │  ├──uni-app-pages.php                # uni-app端口页面文件
│  │  │  │  └──web-package.json                 # web前端依赖包
│  │  │  ├─resource/                            # 插件资源文件
│  │  │  ├─sql/                                 # 插件的sql文件夹 
│  │  │  │  ├─install.sql                       # 插件安装时会自动调用执行
│  │  │  │  ├─unInstall.sql                     # 插件卸载时会自动调用执行
│  │  │  ├─uni-app/                             # 移动端前端目录
│  │  │  │  ├──api/                             # 移动端API接口定义
│  │  │  │  ├──components/                      # 公共组件
│  │  │  │  ├──hooks/                           # 钩子组件
│  │  │  │  ├──locale/                          # 语言包
│  │  │  │  ├──pages/                           # 页面视图
│  │  │  │  ├──static/                          # 静态资源
│  │  │  │  ├──stores/                          # 状态管理
│  │  │  │  ├──styles/                          # 样式表
│  │  │  │  └──utils/                           # 工具函数
│  │  │  ├─web/                                 # web前端目录
│  │  │  │  ├──api/                             # web端API接口定义
│  │  │  │  ├──assets/                          # 静态资源文件
│  │  │  │  ├──lang/                            # 语言包
│  │  │  │  └──pages/                           # 页面视图
│  │  │  ├─Addon.php                            # 插件主安装、卸载、更新时自动调用相关函数
│  │  │  ├─info.json                            # 插件的配置文件
│  │  ├─shop/                                   # shop插件
│  │  ├─...                                     # 其他插件
│  ├─app/                                       # 主应用目录

核心文件说明

Addon.php 插件程序

Addon.php是每个插件必须包含的核心文件,用于管理插件的生命周期,包括安装、卸载和升级操作。每个插件都需要自己实现install, unstall, upgrade 方法。

php
class Addon
{
    /**
     * 插件安装执行
     */
    public function install()
    {
        return true;
    }

    /**
     * 插件卸载执行
     */
    public function uninstall()
    {
        return true;
    }

    /**
     * 插件升级执行
     */
    public function upgrade()
    {
        return true;
    }

}

app.php 路由端口

框架已经定义了各端口的访问路由,端口定义等,如果有需求,可以根据自身业务,进行调整

如需了解核心原理,开发者可以自行阅读

文件位置:niucloud/route/app.php

info.json 插件的配置文件

info.json包含插件的基本配置信息,系统通过此文件识别和管理插件。

插件配置文件位置:niucloud/addon/hello_world/info.json

{
  "title": "hello world", // 插件名称
  "desc": "Niucloud hello world演示插件",// 插件描述
  "key": "hello_world",// 插件标识key
  "version": "1.0.0",// 插件当前版本
  "author": "niucloud",// 开发者名称
  "type": "app",// 插件类型,app:应用,addon:插件
  "support_app": "",// 插件所支持的应用,为空表示通用插件
  "compile":[],//插件编译时需要包含的文件,默认值为空数组 
  "support_version": "1.1.7"// 插件所支持的框架版本号
}

install.sql

sql
    CREATE TABLE IF NOT EXISTS `{{prefix}}hello_world` (
                                                    `id` int unsigned NOT NULL AUTO_INCREMENT,
                                                    `name` varchar(255) NOT NULL DEFAULT '' COMMENT '名称',
                                                    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='演示插件表';
    INSERT INTO `{{prefix}}hello_world`(`id`, `name`) VALUES (1, '名称');

unInstall.sql

sql
    DROP TABLE IF EXISTS `{{prefix}}hello_world`;

注意

开发者在进行插件二开时,应严格遵循上述目录结构,以确保开发的插件能够正常运行并提供良好的用户体验。本文档以hello_world插件为例编写,不同插件可能会有细微差异,但基本框架一致。

基于 MIT 协议发布