env-cmd 环境变量扩展:如何在命令行中动态替换 $var 值

env-cmd 环境变量扩展:如何在命令行中动态替换 $var 值

【免费下载链接】env-cmd Setting environment variables from a file 【免费下载链接】env-cmd 项目地址: https://gitcode.com/gh_mirrors/en/env-cmd

env-cmd 是一款强大的命令行工具,它允许开发者从文件中加载环境变量并在命令执行时动态替换 $var 和 ${var} 格式的变量引用。本文将详细介绍如何使用 env-cmd 的环境变量扩展功能,让你的命令行操作更加灵活高效。

🌟 核心功能:动态变量替换

env-cmd 的核心能力在于其环境变量扩展机制,通过 --expand-envs 选项启用后,工具会自动扫描命令及其参数中的 $var 和 ${var} 格式变量,并使用当前环境中的值进行替换。这一功能由 src/expand-envs.ts 文件中的 expandEnvs 函数实现,其核心正则匹配逻辑为:

str.replace(/(?<!\\)\$(\{\w+\}|\w+)?/g, (varName) => {
  const varValue = envs[varName.startsWith('${') ? varName.slice(2, varName.length - 1) : varName.slice(1)]
  return varValue ?? varName
})

这意味着无论是简单的 $VAR 还是带花括号的 ${VAR} 格式,env-cmd 都能准确识别并替换。

🚀 快速上手:基本使用方法

要使用环境变量扩展功能,只需在命令中添加 -x 或 --expand-envs 选项。以下是一个简单示例:

# 安装 env-cmd
npm install -g env-cmd

# 创建 .env 文件
echo "API_URL=https://api.example.com" > .env
echo "TOKEN=abc123" >> .env

# 使用环境变量扩展执行命令
env-cmd -x -- curl $API_URL -H "Authorization: Bearer $TOKEN"

上述命令会自动将 $API_URL 和 $TOKEN 替换为 .env 文件中定义的值,实际执行的命令为: curl https://api.example.com -H "Authorization: Bearer abc123"

⚙️ 高级选项:递归替换与命令参数

env-cmd 提供了两个关键选项来增强变量替换能力:

--expand-envs:命令行参数替换

通过 src/parse-args.ts 定义的命令行选项,--expand-envs 会替换命令及其参数中的环境变量:

# 替换命令参数中的变量
env-cmd -x -- echo "API URL is $API_URL, Token is $TOKEN"

--recursive:环境文件内变量替换

--recursive 选项允许环境文件中的变量引用其他变量,实现变量的嵌套定义:

# 创建包含嵌套变量的 .env 文件
echo "DOMAIN=example.com" > .env
echo "API_URL=https://api.$DOMAIN" >> .env
echo "FULL_URL=$API_URL/users" >> .env

# 使用递归替换
env-cmd -x --recursive -- echo "Full URL: $FULL_URL"

执行后会输出:Full URL: https://api.example.com/users

🧪 常见用例与示例

1. 开发环境配置

# .env.development
API_URL=http://localhost:3000
DEBUG=true

# 使用特定环境文件并扩展变量
env-cmd -f .env.development -x -- node server.js --url $API_URL --debug $DEBUG

2. 构建脚本参数化

# .env.build
OUTPUT_DIR=dist
MINIFY=true
VERSION=1.0.0

# 带变量的构建命令
env-cmd -x -- webpack --output-path $OUTPUT_DIR --minify $MINIFY --version $VERSION

3. 保留特殊字符

如果需要保留 $ 符号(不进行替换),可以使用反斜杠转义:

# 输出 $HOME 而不是替换为实际路径
env-cmd -x -- echo "Home directory variable is \$HOME"

🛠️ 注意事项与最佳实践

  1. 变量优先级:使用 --no-override 选项可以防止环境文件中的变量覆盖系统已存在的环境变量

  2. 错误处理:未定义的变量会保持原样输出,不会引发错误。使用 --verbose 选项可以查看详细的替换过程:

env-cmd -x --verbose -- echo "Undefined var: $UNDEFINED_VAR"
  1. 文件格式支持:env-cmd 支持多种格式的环境文件,包括 .env、.json、.js 等,通过 -f 选项指定文件路径即可

  2. 安全性:避免在环境文件中存储敏感信息,建议将敏感配置通过系统环境变量传入

通过 env-cmd 的环境变量扩展功能,你可以轻松实现命令行的参数化和配置分离,让开发和部署流程更加灵活高效。无论是小型项目还是大型应用,env-cmd 都能成为你命令行工具链中的得力助手。

【免费下载链接】env-cmd Setting environment variables from a file 【免费下载链接】env-cmd 项目地址: https://gitcode.com/gh_mirrors/en/env-cmd

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值