11 个版本

0.3.0 2023 年 8 月 30 日
0.2.4 2023 年 8 月 7 日
0.2.3 2023 年 7 月 30 日
0.1.4 2023 年 7 月 17 日

#2716命令行实用工具

MIT 许可证

31KB
671

⚡️cdwe (cd with env)

一个简单的可配置的 cd 包装器,提供强大的实用工具来按目录定制您的环境。
(适用于 ZSH / BASH / FISH Shell)

安装用法配置卸载

usage

功能

  • 按目录环境变量
  • 自动加载目录中的 .env 文件
  • 自动执行目录中的命令
  • 按目录别名
  • 与任何 CD 命令一起使用

安装

  1. 安装二进制文件
cargo install cdwe
  1. 初始化您的 shell
cdwe init zsh # zsh shells
cdwe init bash # bash shells
cdwe init fish # fish shells
  1. 重新加载您的 shell 并开始使用!
# check that env var gets set
cdwe /Users/synoet/dev/projecta
echo $IS_DEBUG

# check that env var gets unset
cdwe ..
echo $IS_DEBUG

用法

定义按目录环境变量


您可以通过两种方式显式定义环境变量

[[directory]]
path = "/Users/synoet/dev/project"
vars = {"IS_DEBUG" = "true", "IS_PROD" = "false"}

path: 您正在配置的目录的路径

vars: 要设置的环境变量映射

默认情况下,环境变量也会加载到子目录中,例如,在下面的示例中 /Users/synoet/dev/project/src 也会设置 IS_DEBUGIS_PROD

或者

[[env_variable]]
name = "IS_DEBUG"
value = "true"
dirs = [
  "/Users/synoet/dev/project1",
  "/Users/synoet/dev/project2"
]

在这里,您可以为一组目录定义一个环境变量。

name: 是环境变量的键

value: 是环境变量的值

dirs: 是要加载此环境变量的目录列表

从 .env 文件加载


目录对象还接受一个 load_from 字段

[[directory]]
path = "/Users/synoet/dev/project"
vars = {"IS_DEBUG" = "true", "IS_PROD" = "false"}
load_from = [".env"]

load_from: 要自动加载的 .env 文件名列表,这些文件应相对于在 path 中定义的目录。

在这个示例中,我们将尝试在 /Users/synoet/dev/project/.env 加载一个环境文件

与按目录环境变量不同,环境文件仅在完全匹配的目录中加载,不会在子目录中加载

或者

同样,我们也可以为多个目录定义单个环境文件

[[env_file]]
load_from = ".env"
dirs = [
  "/Users/synoet/dev/macro/macro-site/astro",
  "/Users/synoet/dev/macro/app-monorepo/packages/app"
]

定义按目录别名


在这里,我们可以定义仅在特定目录中设置和取消设置的别名

[[directory]]
path = "/Users/synoet/dev/project"
vars = {"IS_DEBUG" = "true", "IS_PROD" = "false"}
load_from = [".env"]
aliases = [
    { name = "build", commands = ["yarn cache clean", "yarn build", "yarn package"] }
]

在这里,我们定义了一个 build 别名,它将仅在 /User/synoet/dev/project/* 和所有子目录中存在。

aliases: 要为目录定义的别名列表

或者

[[alias]]
name = "build"
commands = ["yarn cache clean", "yarn build", "yarn package"]
dirs = [
    "/Users/synoet/dev/projecta",
    "/Users/synoet/dev/projectb"
]

在这里,您为多个目录定义了相同的别名。

定义自动命令


在这里,我们可以定义在进入特定目录时自动运行的命令

[[directory]]
path = "/Users/synoet/dev/project"
vars = {"IS_DEBUG" = "true", "IS_PROD" = "false"}
load_from = [".env"]
aliases = [
    { name = "build", commands = ["yarn cache clean", "yarn build", "yarn package"] }
]
run = ["git fetch -p", "ls"]

在这种情况下,每次我们进入 /Users/synoet/dev/project 目录,cd命令将自动运行 git fetch -pls

自动命令也需要完全匹配,并且不会传播到子目录

或者

[[command]]
run = "git fetch -p"
dirs = [
  "/Users/synoet/dev/cdwe",
  "/Users/synoet/dev/macro/macro-api"
]

配置

全局配置选项

[config]
# Shell (Created during cdwe init <shell>)
shell = "zsh"
# Custom CD Command (defaults to cd)
cd_command = "z"
# Show alias hints on cd
alias_hints = true
# Show env hints on cd
env_hints = true
# shoe run hints on cd
run_hints = true

示例配置

[config]
cd_command = "z"
alias_hints = true
env_hints = true
command_hints = true
run_hints = true
shell = "zsh"

# Defined a directory
# Will have env var "TEST" set in this directory
# Will auto run "git fetch -p" whenever you cd into this dir
# Exposes the following aliases in that directory and sub dirs
[[directory]]
path = "/Users/synoet/dev/cdwe"
vars = { "TEST" = "testing" }
runs = ["git fetch -p"]
aliases = [
  { name = "build", commands = ["cargo build --release"]},
  { name = "run", commands = ["cargo run"]},
  { name = "ci", commands = ["cargo fmt", "cargo test"]}
]

# sets the "ENV_VAR" env var in the following directories
[[env_variable]]
name = "ENV_VAR"
value = "THIS IS A TEST"
dirs = [
  "/Users/synoet/dev/cdwe",
  "/Users/synoet/dev/ballast"
]

# auto loads from .env file in following directories
[[env_file]]
load_from = ".env"
dirs = [
  "/Users/synoet/dev/cdwe",
  "/Users/synoet/dev/project-api"
]

# will auto run the command "git fetch -p" in the following directories
[[command]]
run = "git fetch -p"
dirs = [
  "/Users/synoet/dev/cdwe",
  "/Users/synoet/dev/project-api"
]

卸载

  1. 运行 cdwe-remove 以清理所有shell元素
cdwe-remove #removes the `source <output>` from your .zshrc/.bashrc/.fish

zsh #reload your shell, use bash or fish if you use those.
  1. 卸载二进制文件
cargo uninstall cdwe

依赖关系

~1.6–2.3MB
~45K SLoC