别名配置

类型定义

alias.types.ts
// 别名对象类型
type AliasObject = {
  $cmd?: string;
  $cwd?: string;
  $interactive?: boolean;
  [key: string]: string | AliasObject | boolean | undefined;
}

// JSON 文件格式类型
type AliasFileJSON = {
  $priority?: number;      // 优先级,默认本地=10 全局=0
  $cwd?: string;           // 文件级 / 分组级工作目录,子别名自动继承
  $interactive?: boolean;  // 文件级 / 分组级交互模式,子别名自动继承
  [key: string]: string | AliasObject | number | boolean | undefined;
};

别名对象类型

Key 命名规则

普通字段

  • key 不能包含 @.,违规则被忽略
  • 支持中文 key 名
  • key 支持嵌套分组(dict),通过 . 分隔符访问

前缀系统字段

通过 $ 前缀系统字段配置别名:

字段类型说明
$cmdstring执行命令(必填)
$cwdstring工作目录(可选)
$interactiveboolean是否交互执行(可选)
Note

$cmd 开头的 object 为别名叶子节点。仅有 $cwd / $interactive 而无 $cmd 的 object 为带继承属性的分组节点。$priority 为文件保留字段。

工作目录 cwd

支持三级继承:文件级 → 分组级 → 别名级,优先级逐级递增(别名自己的 $cwd 覆盖分组级,分组级覆盖文件级)。

别名级指定
分组级继承
文件级继承
{
  "install": {
    "$cmd": "npm i",
    "$cwd": "/project/web"
  }
}

交互模式

交互模式适合需要逐步确认参数或执行危险命令的场景。开启后逐项提示输入占位符值,最后确认执行。

$interactive 同样支持三级继承:文件级 → 分组级 → 别名级。

别名级指定
分组级继承
文件级继承
{
  "deploy": {
    "$cmd": "deploy --env {env} --tag {version}",
    "$interactive": true
  }
}
byk deploy
# ~ deploy --env {env} --tag {version}
#   env: staging
#   version: v2.0
# ~ deploy --env staging --tag v2.0     ← 绿色粗体
#    Press Enter to execute...
Tip

交互和非交互模式 header 和 final 行格式完全一致。交互只是多了 ~ 前缀的输入区和确认步骤。

调用示例

使用系统字段
别名对象嵌套
{
  "dev": "vite",

  "install": {
    "$cmd": "npm i",
    "$cwd": "/Users/coke/project/web"
  },

  "deploy": {
    "$cmd": "deploy --env {env}",
    "$interactive": true
  }
}
byk install    
# 等价于在/Users/coke/project/web 运行 npm i

别名文件

byk 扫描当前目录和全局目录下所有 *.byk.json 文件,自动合并为一个统一的别名空间。

文件命名规范

格式示例说明
[name].byk.jsonrun.byk.json, release.byk.json推荐形式,文件名有语义
.byk.json.byk.json极简形式,匿名文件
Warning

name 合法字符:字母、数字、-_、中文。

禁止字符.@/、空格及其他特殊符号。

非法命名的文件(如 aaa.bbb.byk.json)会被静默跳过,不报错。

目录结构

本地目录(当前工作目录,不递归扫描子目录):

.
run.byk.json
release.byk.json
.byk.json

全局目录:

~/.byk/alias
alias.byk.json
work.byk.json
.byk.json

优先级

所有文件合并为一个统一的 key 空间,高优先级文件的同名 key 覆盖低优先级。

默认优先级

文件位置默认优先级
本地 [name].byk.json10
本地 .byk.json10(匿名文件排序靠后)
全局 [name].byk.json0
全局 .byk.json0(匿名文件排序靠后)

同优先级文件按文件名字母序加载,后者覆盖前者,行为确定。

自定义优先级

通过 $priority 字段声明,可打破默认规则:

任意 .byk.json
{
  "$priority": 20,
  "build": "vite build",
  "dev": "vite"
}
Note

$priority 为保留字段,不会被解析为别名 key。设为负数(如 -1)的文件不参与优先级合并,仅可通过精确语法调用。

精确执行语法

日常使用直接 byk <key>。当需要精确指定执行哪个文件中的别名时:

语法说明
byk @release.build精确执行本地 release.byk.jsonbuild
byk @@release.build精确执行全局 release.byk.jsonbuild
byk @.build精确执行本地 .byk.jsonbuild
byk @@.build精确执行全局 .byk.jsonbuild

约定

  • @ 语法只做文件路由,不做任何 fallback
  • 文件不存在 → 报错,不自动查找其他位置
  • 文件存在但 key 不存在 → 报错
  • Key 名不能包含 @,违反则静默跳过
精确执行示例
# 本地文件不存在
byk @release.build
# Error: local file "release.byk.json" not found

# 全局文件不存在
byk @@work.deploy
# Error: global file "work.byk.json" not found

# key 不存在
byk @release.cleanup
# Error: alias "cleanup" not found in release.byk.json