如何仅通过npm脚本在package.json中重命名.env变量?
解决方案
核心问题原因
你在npm脚本里无法访问.env变量,是因为npm默认不会自动加载.env文件中的环境变量,必须先将这些变量导入到当前脚本的shell环境中,才能读取和修改。
无需外部脚本的实现方式
方式1:原生Shell命令(分平台)
适用于不需要跨平台的场景,直接通过shell命令加载.env并重命名变量:
Unix-like系统(macOS/Linux)
在package.json的scripts中添加项目专属命令:
"scripts": { "cy:project-a": "source .env && export PERCY_TOKEN=$PROJECT_A_PERCY_TOKEN && cypress run", "cy:project-b": "source .env && export PERCY_TOKEN=$PROJECT_B_PERCY_TOKEN && cypress run" }
执行时直接运行npm run cy:project-a或npm run cy:project-b即可自动切换对应的PERCY_TOKEN。
Windows CMD环境
修改脚本为Windows兼容的语法:
"scripts": { "cy:project-a": "for /f \"tokens=*\" %i in (.env) do set %i && set PERCY_TOKEN=%PROJECT_A_PERCY_TOKEN% && cypress run", "cy:project-b": "for /f \"tokens=*\" %i in (.env) do set %i && set PERCY_TOKEN=%PROJECT_B_PERCY_TOKEN% && cypress run" }
方式2:跨平台通用方案(推荐)
使用dotenv-cli和cross-env实现跨平台兼容,无需区分系统:
- 安装依赖:
npm install --save-dev dotenv-cli cross-env
- 在
package.json中配置脚本:
"scripts": { "cy:project-a": "dotenv -e .env -- cross-env PERCY_TOKEN=$PROJECT_A_PERCY_TOKEN cypress run", "cy:project-b": "dotenv -e .env -- cross-env PERCY_TOKEN=$PROJECT_B_PERCY_TOKEN cypress run" }
dotenv-cli负责自动加载.env文件中的变量到环境中cross-env确保跨平台环境变量设置语法一致- 执行时同样运行
npm run cy:project-a或npm run cy:project-b即可切换项目
内容的提问来源于stack exchange,提问作者totymedli
相关产品推荐
相关产品推荐

