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

如何通过npm脚本动态修改.env文件中的STATUS变量?

问题

我正在开发一个Discord机器人项目,项目的.env文件包含敏感信息,其中有STATUS变量,当前配置为STATUS=DEVELOPMENT。代码会根据STATUS的值决定Slash命令的部署目标:

  • 值为DEVELOPMENT时,部署到开发服务器
  • 值为PRODUCTION时,部署到机器人所在的所有服务器

核心代码如下:

if (STATUS == "DEVELOPMENT") {
  Routes.applicationGuildCommands(CLIENT_ID, process.env.DEVELOPMENT_GUILD_ID),
    { body: slashCommands },
    console.log(
      chalk.yellow(`Slash Commands • Registered Locally to 
  the development server`)
    );
} else if (STATUS == "PRODUCTION") {
  await rest.put(
    Routes.applicationCommands(CLIENT_ID),
    { body: slashCommands },
    console.log(chalk.yellow("Slash Commands • Registered Globally"))
  );
}

我希望在package.json中配置两个npm脚本,分别将STATUS设为PRODUCTION和DEVELOPMENT后运行项目文件,期望的脚本示例如下:

"scripts": {
      "prod": "changes the 'STATUS' to 'PRODUCTION' and runs the file",
      "dev": "changes the 'STATUS' to 'DEVELOPMENT' and runs the file"
  },

请问如何通过npm脚本动态修改.env文件实现这一需求?

解决方案

方法一:临时设置环境变量(无需修改.env,推荐)

不需要修改.env文件,直接在npm脚本中临时注入环境变量,优先级会覆盖.env中的值,更安全且不会污染原始配置文件。

Linux/macOS(Bash环境)

"scripts": {
  "dev": "STATUS=DEVELOPMENT node your-bot-file.js",
  "prod": "STATUS=PRODUCTION node your-bot-file.js"
}

Windows(Command Prompt)

"scripts": {
  "dev": "set STATUS=DEVELOPMENT && node your-bot-file.js",
  "prod": "set STATUS=PRODUCTION && node your-bot-file.js"
}

跨平台兼容(使用cross-env包)

如果需要跨Windows、Linux、macOS运行,先安装cross-env:

npm install cross-env --save-dev

然后配置脚本:

"scripts": {
  "dev": "cross-env STATUS=DEVELOPMENT node your-bot-file.js",
  "prod": "cross-env STATUS=PRODUCTION node your-bot-file.js"
}

方法二:动态修改.env文件

如果一定要修改.env文件的内容,可以用命令行工具实现:

Linux/macOS(使用sed命令)

"scripts": {
  "dev": "sed -i '' 's/^STATUS=.*/STATUS=DEVELOPMENT/' .env && node your-bot-file.js",
  "prod": "sed -i '' 's/^STATUS=.*/STATUS=PRODUCTION/' .env && node your-bot-file.js"
}

注:部分Linux发行版不需要'',直接用sed -i 's/^STATUS=.*/STATUS=PRODUCTION/' .env

Windows(使用PowerShell命令)

"scripts": {
  "dev": "(Get-Content .env) -replace '^STATUS=.*', 'STATUS=DEVELOPMENT' | Set-Content .env; node your-bot-file.js",
  "prod": "(Get-Content .env) -replace '^STATUS=.*', 'STATUS=PRODUCTION' | Set-Content .env; node your-bot-file.js"
}

跨平台兼容(使用dotenv-cli+replace-in-file包)

  1. 安装依赖:
npm install dotenv-cli replace-in-file --save-dev
  1. 配置脚本:
"scripts": {
  "dev": "replace-in-file '^STATUS=.*' 'STATUS=DEVELOPMENT' .env && dotenv -e .env node your-bot-file.js",
  "prod": "replace-in-file '^STATUS=.*' 'STATUS=PRODUCTION' .env && dotenv -e .env node your-bot-file.js"
}

内容的提问来源于stack exchange,提问作者bradys dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:40:36