Facades
This page mirrors the Chinese documentation for accuracy. Switch language to 简体中文, or open the Chinese version.
概述
Goravel v1.17 引入了 Facades 按需安装和卸载功能。由于项目已经升级到 v1.17 并完成了代码结构简化,现在可以使用 package:install 和 package:uninstall 命令来管理 facades。
当前状态
项目当前使用的是完整的 goravel/goravel(不是 goravel/goravel-lite),所有 facades 已经默认安装。facades 文件位于 app/facades 目录中。
可用的 Facades
当前项目中已安装的 facades:
App- 应用实例Artisan- 命令行工具Auth- 身份验证Cache- 缓存Config- 配置Crypt- 加密DB- 数据库查询构建器Event- 事件系统Gate- 授权Grpc- gRPC 客户端Hash- 哈希Http- HTTP 客户端Lang- 多语言Log- 日志Mail- 邮件Orm- ORMProcess- 进程管理Queue- 队列RateLimiter- 速率限制Route- 路由Schedule- 任务调度Schema- 数据库模式Seeder- 数据填充Session- 会话Storage- 文件存储Testing- 测试Validation- 验证View- 视图
安装 Facades
安装指定的 Facade
# 安装 Route facade
./artisan package:install Route
# 安装多个 facades
./artisan package:install Route Cache Queue安装所有 Facades
# 安装所有 facades(交互式选择)
./artisan package:install --all
# 使用默认驱动安装所有 facades
./artisan package:install --all --default注意:使用交互式安装时:
- 按下
x选择要安装的 facades - 按下
Enter确认安装 - 如果直接按下
Enter而不选择,默认没有 facades 被选中
卸载 Facades
卸载指定的 Facade
# 卸载 Route facade
./artisan package:uninstall Route
# 卸载多个 facades
./artisan package:uninstall Route Cache Queue使用场景
场景 1:优化项目体积
如果你的项目不需要某些 facades,可以卸载它们以减少编译后的二进制文件大小:
# 卸载不需要的 facades
./artisan package:uninstall Grpc Gate Testing场景 2:按需添加功能
如果项目开始时只使用基本功能,后续需要添加新功能时再安装对应的 facades:
# 初始只安装基本 facades
./artisan package:install Config Log Route
# 后续需要邮件功能时
./artisan package:install Mail场景 3:迁移到轻量版
如果将来想迁移到 goravel/goravel-lite,可以先卸载不需要的 facades,然后切换到 lite 版本:
# 卸载不需要的 facades
./artisan package:uninstall Grpc Gate Testing View
# 然后修改 go.mod,将 goravel/goravel 改为 goravel/goravel-lite注意事项
服务提供者依赖:卸载 facade 不会自动卸载对应的服务提供者。如果服务提供者在
bootstrap/providers.go中注册,需要手动移除。代码引用:卸载 facade 前,确保代码中没有使用该 facade,否则会导致编译错误。
配置文件:某些 facades 可能需要在配置文件中进行配置(如
config/http.go、config/cache.go等),卸载后可能需要清理相关配置。向后兼容:当前项目已安装所有 facades,如果不需要优化体积,可以保持现状。
检查 Facade 使用情况
在卸载 facade 前,可以使用以下命令检查代码中的使用情况:
# 检查 Route facade 的使用
grep -r "facades.Route()" app/ routes/ --include="*.go"
# 检查 Cache facade 的使用
grep -r "facades.Cache()" app/ --include="*.go"项目中 Facades 使用情况分析
根据代码扫描,项目中实际使用的 facades:
必须保留的 Facades:
Schema- 多处使用(分表、迁移等)Lang- 多处使用(多语言翻译)Route- 路由系统Log- 日志记录Orm- ORM 查询Config- 配置读取Queue- 队列系统Auth- 身份验证Cache- 缓存Http- HTTP 客户端Session- 会话管理Validation- 数据验证Hash- 哈希加密Crypt- 加密解密Mail- 邮件发送Storage- 文件存储Artisan- 命令行工具Schedule- 任务调度Event- 事件系统DB- 数据库查询构建器RateLimiter- 速率限制
可能未使用的 Facades(需要确认):
Grpc- gRPC 客户端(项目中未发现使用)✅ 已成功卸载Gate- 授权门面(项目中未发现使用)✅ 已成功卸载Testing- 测试工具(仅在测试代码中使用,生产环境不需要)View- 视图渲染(项目是纯 API,不使用视图模板)❌ 无法卸载(依赖于 Route)Process- 进程管理(项目中未发现使用)❌ 无法卸载(基础 facade)Seeder- 数据填充(仅在数据库填充时使用)
卸载限制说明:
Process- 基础 Facade- 原因:
Process是框架核心功能,属于基础 facade - 状态:无法卸载
- 建议:保留,即使当前未使用
- 原因:
View- 依赖 Route- 原因:
Viewfacade 依赖于Routefacade - 原因分析:HTTP 驱动配置(
config/http.go)中的template配置可能使用 View 功能 - 状态:如果
Route已安装,View无法卸载 - 解决方案:
- 如果确实不需要视图功能,需要先检查
config/http.go中的template配置 - 如果项目是纯 API,可以考虑移除
template配置后再尝试卸载 - 或者保留
Viewfacade(即使不使用,影响也不大)
- 如果确实不需要视图功能,需要先检查
- 原因:
注意:
Testingfacade 在测试代码中使用,如果只优化生产环境,可以保留- 即使某些 facade 在当前代码中未直接使用,它们可能被框架内部或其他包使用,卸载前请仔细测试
- 建议先在不重要的环境中测试卸载,确认无误后再应用到生产环境
- 基础 facades(如
Process、App、Config、Artisan)无法卸载
示例:卸载不需要的 Facades
实际卸载示例
根据实际测试,以下 facades 可以成功卸载:
# 成功卸载 Grpc 和 Gate
./artisan package:uninstall Grpc Gate
# 输出:
# SUCCESS Facade Grpc uninstalled successfully
# SUCCESS Facade Gate uninstalled successfully无法卸载的 Facades
# 尝试卸载 View(会失败)
./artisan package:uninstall View
# 错误:Facade View is depended on Route facades, cannot be uninstalled
# 尝试卸载 Process(会失败)
./artisan package:uninstall Process
# 警告:Facade Process is a base facade, cannot be uninstalled完整的卸载流程
# 1. 检查使用情况
grep -r "facades.Grpc()" app/ --include="*.go"
grep -r "facades.Gate()" app/ --include="*.go"
grep -r "facades.Testing()" app/ --include="*.go"
# 2. 尝试卸载(会提示哪些无法卸载)
./artisan package:uninstall Grpc Gate View Process Testing
# 3. 只卸载可以卸载的
./artisan package:uninstall Grpc Gate Testing
# 4. 检查编译是否正常
go build .
# 5. 运行测试确保功能正常
go test ./...
# 6. 如果一切正常,可以提交更改如果确实需要卸载 View
如果项目是纯 API,不使用视图功能,可以尝试以下步骤:
# 1. 检查 config/http.go 中的 template 配置
# 如果配置了 template,可能需要移除或注释掉
# 2. 尝试先卸载 Route(如果项目不使用视图,Route 可能也不需要)
# 注意:这会影响整个路由系统,请谨慎操作
# 3. 或者保留 View facade,即使不使用影响也不大重新安装 Facade
如果误卸载了需要的 facade,可以重新安装:
# 重新安装 Route facade
./artisan package:install Route