env-cmd 环境变量扩展:如何在命令行中动态替换 $var 值
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"
🛠️ 注意事项与最佳实践
-
变量优先级:使用
--no-override选项可以防止环境文件中的变量覆盖系统已存在的环境变量 -
错误处理:未定义的变量会保持原样输出,不会引发错误。使用
--verbose选项可以查看详细的替换过程:
env-cmd -x --verbose -- echo "Undefined var: $UNDEFINED_VAR"
-
文件格式支持:env-cmd 支持多种格式的环境文件,包括
.env、.json、.js等,通过-f选项指定文件路径即可 -
安全性:避免在环境文件中存储敏感信息,建议将敏感配置通过系统环境变量传入
通过 env-cmd 的环境变量扩展功能,你可以轻松实现命令行的参数化和配置分离,让开发和部署流程更加灵活高效。无论是小型项目还是大型应用,env-cmd 都能成为你命令行工具链中的得力助手。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



