You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在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 脚本处理逻辑:

  1. 在项目根目录创建 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 命令
  1. 在 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 04:35:10