首页  >  文章  >  后端开发  >  为什么我从 Makefile 切换到 Taskfile

为什么我从 Makefile 切换到 Taskfile

Patricia Arquette
Patricia Arquette原创
2024-11-06 05:05:03301浏览

Why I Switched from Makefile to 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 语法来定义任务。它通过自动执行重复性任务(例如构建、测试和部署代码)来简化项目工作流程。

任务文件的好处:

  • 可读的 YAML 语法:比 Makefile 更容易理解。
  • 单个二进制文件: 除 Go 运行时之外没有任何依赖项。
  • 跨平台支持:适用于 Linux、macOS 和 Windows。

这是我如何使用任务文件解决我的问题:

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn