能否在npm配置中用if语句实现按环境切换AWS账户?
可行方案与替代方法
npm 的 package.json 中 config 字段本身不支持直接编写条件判断语句,以下是几种实用的解决思路:
方案1:直接在 npm 脚本中嵌入 Shell 条件判断(Unix-like 环境)
直接在 scripts 字段中编写 Shell 的 if/elif 逻辑,无需依赖额外工具,适合 Linux/macOS 或使用 Git Bash/WSL 的 Windows 用户:
{ "scripts": { "con": "if [ \"$npm_config_env\" = \"dev\" ]; then export AWS_DEFAULT_PROFILE=account1; elif [ \"$npm_config_env\" = \"prod\" ]; then export AWS_DEFAULT_PROFILE=account2; fi && aws s3 ls" } }
- 执行方式:
npm run con --env=dev或npm run con --env=prod - 注意:JSON 中双引号需转义(
\"),否则会破坏 JSON 结构;脚本最后可替换为你实际需要调用的 AWS S3 命令。
方案2:编写跨平台 Node.js 脚本(全平台通用)
如果需要兼容 Windows、macOS、Linux 所有平台,推荐编写一个简单的 Node.js 脚本处理逻辑:
- 在项目根目录创建
aws-con.js文件:
const { execSync } = require('child_process'); const targetEnv = process.env.npm_config_env; let awsProfile; switch(targetEnv) { case 'dev': awsProfile = 'account1'; break; case 'prod': awsProfile = 'account2'; break; default: console.error('错误:请指定 --env=dev 或 --env=prod'); process.exit(1); } // 设置环境变量并执行 AWS 命令 process.env.AWS_DEFAULT_PROFILE = awsProfile; execSync('aws s3 ls', { stdio: 'inherit' }); // 替换为你的实际 AWS S3 命令
- 在
package.json中配置脚本:
{ "scripts": { "con": "node aws-con.js" } }
- 执行方式同样为
npm run con --env=dev或npm run con --env=prod - 优势:完全跨平台,无需担心不同系统的 Shell 语法差异。
方案3:Windows CMD 专用脚本(无 Node.js 依赖)
如果仅需适配 Windows CMD 环境,可使用 CMD 的条件判断语法:
{ "scripts": { "con": "if \"%npm_config_env%\"==\"dev\" (set AWS_DEFAULT_PROFILE=account1) else if \"%npm_config_env%\"==\"prod\" (set AWS_DEFAULT_PROFILE=account2) && aws s3 ls" } }
内容的提问来源于stack exchange,提问作者whitebear
相关产品推荐
相关产品推荐

