为什么我从 Makefile 切换到 Taskfile
照片由 kelly sikkema 在 unsplash 上拍摄
介绍
软件项目涉及多个阶段,包括构建、测试和部署代码。
例如,编译 go 源代码会生成可执行文件,而前端框架则编译为 html、css 和 javascript 文件。
在合并更改或发布新版本之前,测试至关重要。部署脚本通常将软件交付到生产环境。
每个阶段都需要不同的工具,通常是具有各种标志和参数的命令行实用程序。
自动化工具简化了这些流程,提高了日常工作流程的效率。
生成文件
makefile 是自动化软件项目工作流程的强大工具。它们最初是为 c 程序开发的,现在支持网站生成和数据处理等多种任务。
makefile 包含 make 实用程序构建或维护程序和文件的指令。它定义了任务及其依赖关系,确保高效且可重复的构建。
我不会在这篇博文中深入探讨 makefile,因为我假设读者熟悉这个概念。如果没有,互联网上有大量信息(例如本教程或维基百科页面)。
makefile 的优点:
- 与 make 实用程序集成,可在大多数 linux/macos 系统上使用。
- 一个拥有近 50 年历史的成熟工具。
这些是我认为 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的详细内容,更多请关注其它相关文章!