• 亮色
  • 深色
  • 自动
  • RSS 订阅

    just 学习记录

    2024-04-14

    介绍

    just 是一个 rust 版本的 make 替代品,可以用来给项目的一些命令配置便捷的执行方式。类似 npm 中的 npm run … 的概念,但是更加强大。且 just 的配置文件语法类似 yaml,也使得结构清晰易懂。

    安装

    安装包 - Just 用户指南 上列出了多种安装方式,下面是 Debian 安装的示例:

    wget -qO - 'https://proget.makedeb.org/debian-feeds/prebuilt-mpr.pub' | gpg --dearmor | sudo tee /usr/share/keyrings/prebuilt-mpr-archive-keyring.gpg 1> /dev/null
    echo "deb [arch=all,$(dpkg --print-architecture) signed-by=/usr/share/keyrings/prebuilt-mpr-archive-keyring.gpg] https://proget.makedeb.org prebuilt-mpr $(lsb_release -cs)" | sudo tee /etc/apt/sources.list.d/prebuilt-mpr.list
    sudo apt update
    sudo apt install just -y
    

    杂项

    别名

    可以在 Shell 配置文件中设置别名:

    alias j=just
    

    补全

    参考:Shell Completion Scripts - Just Programmer’s Manual

    可以在 Shell 配置文件里添加 just 的自动补全,下面是 zsh 的示例:

    just --completions zsh > just.zsh
    

    如果是 ohmyzsh,可以在这样:

    mkdir $ZSH_CUSTOM/plugins/just
    just --completions zsh > $ZSH_CUSTOM/plugins/just/_just
    

    然后在 ~/.zshrc 里添加 plugins

    plugins=(just ...)
    

    VSCode 扩展

    要让 VSCode 能够给 plaintext 文件配置高亮,可以安装 skellock.just 插件。

    plaintext 配置

    Tip

    中文文档里叫做 “配方”,但是对于我来说,“配置” 更好理解一点,所以下面的的 “配置” 都可以理解为中文文档里所说的 “配方”。

    默认配置

    如果在命令行里直接调用 just 的时候,just 会执行 plaintext 配置文件里的第一个配置。在如下的配置列表里,会执行 build 配置:

    build:
      echo Building…
    
    test:
      echo Testing…
    
    lint:
      echo Linting…
    

    可以在你当前所在目录下的 plaintext 文件里(如果没有的话,就手动创建),填写上述内容,然后在命令行里输入 just

    此外,也可以指定默认要执行的操作,如果想要修改 just 默认行为的话。下面的示例是默认依次执行 lintbuildtest 配置:

    default: lint build test
    
    build:
      echo Building…
    
    test:
      echo Testing…
    
    lint:
      echo Linting…
    

    或者如果想默认列出能执行的配置:

    default:
      just --list
    

    列出可调用的配置

    前面已经介绍了可以使用 just --list 列出配置,此外也可以用 just --summary 以更简洁的方式列出配置。

    还可以传递 --unsorted 让配置依照 plaintext 中出现的顺序排列。

    配置别名

    可以在 plaintext 里给配置设置别名,以便更方便调用:

    alias b := build
    
    build:
      echo 'Building!'
    
    just b
    

    设置

    可以在 plaintext 里设置一些变量,来修改执行的方式。

    读取环境变量

    # 当设置此项时表示允许读取 .env 文件作为环境变量
    set dotenv-load
    

    设置环境变量

    # 当设置此项时表示导出所有变量作为环境变量
    set export
    # >>> 定义和使用环境变量示例 >>>
    a := "hello"
    @foo b:
      echo $a
      echo $b
    # <<< 定义和使用环境变量示例 <<<
    

    位置参数

    # 当设置此项时表示位置参数
    set positional-arguments
    
    示例 1

    定义 run 配置,该配置接收两个参数:

    @run example1 example2:
      echo $0
      echo $1
      echo $2
    
    • $0 是命令的名称,在这里是 foo
    • $1 是用户传递的第一个参数
    • $2 是用户传递的第二个参数

    调用示例:

    just run 参数 1 参数 2
    
    示例 2

    对于 sh 系的 Shell(如 bashzsh),$@ 会展开成传给配置的传值参数,从 $1 开始。如果使用 "" 包裹 $@ 参数,即使没有传递参数值,也会使用一个空白字符串替代 $1

    @test *args='':
      bash -c 'while (( "$#" )); do echo - $1; shift; done' -- "$@"
    

    调用示例:

    just test 参数1 参数2
    

    返回:

    - 参数1
    - 参数2
    

    调用示例:

    just test
    

    返回:

    -
    

    Shell

    shell 参数可以用来修改配置执行时的内容。

    Python

    比如在想在配置里执行 Python 代码,可以像下面这样:

    # use python3 to execute recipe lines and backticks
    set shell := ["python3", "-c"]
    
    # use print to capture result of evaluation
    foos := `print("foo" * 4)`
    
    foo:
      print("Snake snake snake snake.")
      print("{{foos}}")
    
    

    just 会把要执行的命令作为一个参数进行传递。许多 Shell 需要一个额外的标志,通常是 -c,以使它们评估执行第一个参数。

    调用:

    just foo
    

    返回:

    print("Snake snake snake snake.")
    Snake snake snake snake.
    print("foofoofoofoo")
    foofoofoofoo
    

    Zsh

    set shell := ["zsh", "-uc"]