# Kylin Modules 模块管理

## 1. 模块管理概述

Kylin Modules 提供了丰富的模块管理功能，支持模块的创建、安装、启用、禁用和卸载等操作。

## 2. 命令行工具

### 2.1 创建模块

```bash
php artisan module:create {module} [--force]
```

**参数说明**：
- `{module}`：模块名称
- `--force`：强制创建，覆盖已存在的模块

**示例**：

```bash
php artisan module:create Blog
php artisan module:create Blog --force
```

### 2.2 安装模块

```bash
php artisan module:install {module}
```

**参数说明**：
- `{module}`：模块名称

**示例**：

```bash
php artisan module:install Blog
```

### 2.3 启用模块

```bash
php artisan module:enable {module}
```

**参数说明**：
- `{module}`：模块名称

**示例**：

```bash
php artisan module:enable Blog
```

### 2.4 禁用模块

```bash
php artisan module:disable {module}
```

**参数说明**：
- `{module}`：模块名称

**示例**：

```bash
php artisan module:disable Blog
```

### 2.5 卸载模块

```bash
php artisan module:uninstall {module} [--force]
```

**参数说明**：
- `{module}`：模块名称
- `--force`：强制卸载，不提示确认

**示例**：

```bash
php artisan module:uninstall Blog
php artisan module:uninstall Blog --force
```

### 2.6 列出模块

```bash
php artisan module:list
```

**示例**：

```bash
php artisan module:list
```

### 2.7 模块状态

```bash
php artisan module:status {module}
```

**参数说明**：
- `{module}`：模块名称

**示例**：

```bash
php artisan module:status Blog
```

## 3. 模块管理 API

### 3.1 模块管理器

模块管理器提供了模块管理的核心功能：

```php
use Kylin\Modules\ModuleManager;

$moduleManager = app(ModuleManager::class);

// 获取所有模块
$modules = $moduleManager->getModules();

// 获取单个模块
$module = $moduleManager->getModule('Blog');

// 创建模块
$moduleManager->createModule('Blog');

// 安装模块
$moduleManager->installModule('Blog');

// 启用模块
$moduleManager->enableModule('Blog');

// 禁用模块
$moduleManager->disableModule('Blog');

// 卸载模块
$moduleManager->uninstallModule('Blog');

// 检查模块是否存在
$exists = $moduleManager->hasModule('Blog');

// 检查模块是否启用
$enabled = $moduleManager->isEnabled('Blog');
```

### 3.2 模块类

模块类提供了单个模块的管理功能：

```php
use Kylin\Modules\Module;

$module = new Module('Blog');

// 获取模块名称
$name = $module->getName();

// 获取模块路径
$path = $module->getPath();

// 获取模块命名空间
$namespace = $module->getNamespace();

// 检查模块是否存在
$exists = $module->exists();

// 检查模块是否启用
$enabled = $module->isEnabled();

// 启用模块
$module->enable();

// 禁用模块
$module->disable();

// 安装模块
$module->install();

// 卸载模块
$module->uninstall();
```

## 4. 模块生命周期

### 4.1 模块创建

1. **创建目录结构**：创建模块的目录结构
2. **创建配置文件**：创建模块的配置文件
3. **创建服务提供者**：创建模块的服务提供者
4. **创建路由文件**：创建模块的路由文件
5. **创建控制器**：创建模块的控制器
6. **创建模型**：创建模块的模型
7. **创建视图**：创建模块的视图

### 4.2 模块安装

1. **检查模块**：检查模块是否存在
2. **注册服务**：注册模块的服务提供者
3. **加载路由**：加载模块的路由文件
4. **加载视图**：加载模块的视图文件
5. **加载配置**：加载模块的配置文件

### 4.3 模块启用

1. **检查模块**：检查模块是否存在
2. **启用服务**：启用模块的服务提供者
3. **加载路由**：加载模块的路由文件
4. **加载视图**：加载模块的视图文件
5. **加载配置**：加载模块的配置文件

### 4.4 模块禁用

1. **检查模块**：检查模块是否存在
2. **禁用服务**：禁用模块的服务提供者
3. **移除路由**：移除模块的路由文件
4. **移除视图**：移除模块的视图文件
5. **移除配置**：移除模块的配置文件

### 4.5 模块卸载

1. **检查模块**：检查模块是否存在
2. **禁用模块**：禁用模块
3. **删除文件**：删除模块的所有文件
4. **清理配置**：清理模块的配置信息

## 5. 常见问题

### 5.1 模块创建失败

**问题**：模块创建失败
**解决方案**：
1. 检查模块名称是否符合规范
2. 检查模块目录是否已存在
3. 检查文件权限是否正确

### 5.2 模块安装失败

**问题**：模块安装失败
**解决方案**：
1. 检查模块是否存在
2. 检查模块的服务提供者是否正确
3. 检查模块的依赖是否满足

### 5.3 模块启用失败

**问题**：模块启用失败
**解决方案**：
1. 检查模块是否存在
2. 检查模块的服务提供者是否正确
3. 检查模块的配置是否正确

### 5.4 模块禁用失败

**问题**：模块禁用失败
**解决方案**：
1. 检查模块是否存在
2. 检查模块是否已启用
3. 检查文件权限是否正确

### 5.5 模块卸载失败

**问题**：模块卸载失败
**解决方案**：
1. 检查模块是否存在
2. 检查模块是否已禁用
3. 检查文件权限是否正确

## 6. 最佳实践

1. **模块命名**：使用清晰、描述性的模块名称
2. **目录结构**：遵循统一的模块目录结构
3. **服务提供者**：每个模块创建一个服务提供者
4. **依赖管理**：在模块的 `composer.json` 文件中管理依赖
5. **版本控制**：为每个模块单独进行版本控制
6. **测试**：为每个模块编写测试
7. **文档**：为每个模块编写文档

## 7. 总结

Kylin Modules 提供了丰富的模块管理功能，支持模块的创建、安装、启用、禁用和卸载等操作。通过命令行工具和 API，可以方便地管理模块的生命周期，提高开发效率和代码的可维护性。
