也许是时候换掉Make使用Just

237 阅读2分钟

提问:找一个可以对命令行做管理,便于管理项目中常用的命令,做为相关管理文档的一部分。

为了有效管理项目中的常用命令行指令并将其整合到文档中,以下是几种推荐的方法及工具,根据团队需求和技术栈选择最适合的方案:


1. 使用 Makefile(适合熟悉 Make 的团队)

  • 优势:跨语言支持、广泛使用、任务依赖管理。
  • 示例
    .PHONY: test serve clean
    
    ## 运行单元测试
    test:
        pytest tests/
    
    ## 启动开发服务器(端口 8000)
    serve:
        python -m http.server 8000
    
    ## 清理临时文件
    clean:
        rm -rf build/
    
  • 使用make <任务名>,如 make test
  • 文档化:在注释中用 ## 描述任务,运行 make help 可生成帮助(需添加帮助函数)。

2. 使用 Justfile(现代轻量级替代)

  • 优势:语法简洁、自动生成帮助、参数支持。
  • 安装cargo install just(需 Rust 环境)。
  • 示例
    # 运行测试
    test:
        cargo test
    
    # 启动开发服务器(端口={{port}})
    serve port=8000:
        python -m http.server {{port}}
    
  • 使用just <任务名>,如 just serve port=3000
  • 文档化:运行 just --list 列出所有任务及描述。

3. 使用 Taskfile.yml(YAML 配置,适合复杂流程)

  • 优势:结构化配置、跨平台、多步骤任务。
  • 安装:下载二进制文件或使用包管理器。
  • 示例
    version: '3'
    tasks:
      test:
        desc: "运行所有测试"
        cmds:
          - pytest tests/
      
      deploy:
        desc: "部署到生产环境"
        cmds:
          - docker build -t myapp .
          - docker push myapp:latest
    
  • 使用task <任务名>,如 task deploy
  • 文档化:运行 task --list-all 显示任务详情。

4. Shell 脚本 + Markdown 文档(简单直接)

  • 优势:无需额外工具,适合小型项目。
  • 示例
    • scripts/run_tests.sh
      #!/bin/bash
      echo "Running tests..."
      pytest tests/
      
    • COMMANDS.md
      ## 常用命令
      - **测试**`./scripts/run_tests.sh`
      - **启动服务**`python -m http.server 8000`
      
  • 集成:在 README 中链接到 COMMANDS.md

5. 集成到开发工具(如 npm scripts、Poetry)

  • 适用场景:若项目基于特定生态(如 Node.js、Python)。
  • 示例package.json):
    {
      "scripts": {
        "test": "pytest tests/",
        "serve": "python -m http.server 8000"
      }
    }
    
  • 使用npm run testyarn serve

选择建议

  • 快速上手:选 JustTaskfile,语法友好且文档自动生成。
  • 传统项目:用 Makefile,兼容性高。
  • 零依赖:Shell 脚本 + Markdown 文档。
  • 生态集成:如 npm/Poetry scripts。

最佳实践

  1. 版本控制:将配置文件(如 Justfile)加入 Git,确保团队同步。
  2. 文档注释:为每个任务添加清晰描述,便于 --list 生成帮助。
  3. 跨平台测试:确保命令在 Windows/macOS/Linux 均可运行(如使用 Docker)。
  4. CI/CD 集成:在流水线中直接调用定义好的任务(如 just deploy)。

通过上述方法,团队可高效管理命令并保持文档实时更新,提升协作效率。