照片由 Kelly Sikkema 在 Unsplash 拍摄
软件项目涉及多个阶段,包括构建、测试和部署代码。
例如,编译 Go 源代码会生成可执行文件,而前端框架则编译为 HTML、CSS 和 JavaScript 文件。
在合并更改或发布新版本之前,测试至关重要。部署脚本通常将软件交付到生产环境。
每个阶段都需要不同的工具,通常是具有各种标志和参数的命令行实用程序。
自动化工具简化了这些流程,提高了日常工作流程的效率。
Makefile 是自动化软件项目工作流程的强大工具。它们最初是为 C 程序开发的,现在支持网站生成和数据处理等多种任务。
Makefile 包含 make 实用程序构建或维护程序和文件的指令。它定义了任务及其依赖关系,确保高效且可重复的构建。
我不会在这篇博文中深入探讨 Makefile,因为我假设读者熟悉这个概念。如果没有,互联网上有大量信息(例如本教程或维基百科页面)。
Makefile 的优点:
这些是我认为 Makefile 具有的主要优点。然而,Makefile 有局限性,特别是它们的语法,对于复杂的任务来说可能很麻烦。
在我的一个项目中,我使用 Makefile 来执行诸如运行前端/后端服务和数据库迁移之类的任务。以下是迁移任务的示例:
migrate-up: GOOSE_DRIVER=postgres GOOSE_DBSTRING="user=app host=localhost port=5432 dbname=my-app sslmode=disable user=app" \ goose -dir database/migrations up
我想默认从 .env 文件加载环境变量,但允许使用 ENV_FILE=.env.Production 进行覆盖。在与 Makefile 语法和不起作用的解决方案进行斗争之后,我寻找替代方案。
Taskfile 是一个基于 Go 的任务运行器,使用 YAML 语法来定义任务。它通过自动执行重复性任务(例如构建、测试和部署代码)来简化项目工作流程。
任务文件的好处:
这是我如何使用任务文件解决我的问题:
version: '3' dotenv: - '.env' tasks: migrate-up: cmds: - goose -dir database/migrations up migrate-up-prod: dotenv: - .env.production cmds: - echo executing DB migration on PRODUCTION .. - sleep 2 # allow time to cancel - goose -dir database/migrations up
Taskfile 直观的 API 让我能够快速实现一个既实用又可读的解决方案。
选择正确的工具可以显着影响生产力。虽然 Makefile 最初达到了其目的,但 Taskfile 为我的需求提供了更优雅的解决方案。转换花费了不到 30 分钟,大大简化了我的构建过程。
如果您正在寻找易于使用的构建工具,请考虑尝试一下 Taskfile。
以上是为什么我从 Makefile 切换到 Taskfile的详细内容。更多信息请关注PHP中文网其他相关文章!