插件目录结构
以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插件为例编写,不同插件可能会有细微差异,但基本框架一致。
