如何在NPM Scripts中使用.env文件里的环境变量?
跨系统在npm脚本中加载.env变量运行Apollo Rover的解决方案
你的问题核心是cross-env/cross-env-shell仅负责跨系统统一环境变量的设置逻辑,但不会自动读取.env文件中的变量,所以环境中不存在ACCESS_TOKEN,导致输出为空。以下是兼容类Unix和Windows系统的完整解决方案:
步骤1:安装必要依赖
需要同时使用dotenv(负责加载.env文件到环境变量)和cross-env(跨系统环境变量兼容):
npm install --save-dev dotenv cross-env
如果想简化脚本写法,也可以额外安装dotenv-cli(无需手动写Node加载逻辑):
npm install --save-dev dotenv-cli cross-env
步骤2:修正.env文件格式
移除变量值的引号,避免dotenv解析时将引号包含到变量值中:
ACCESS_TOKEN=jdaksc8ds7vp98vwy8
注意:务必将
.env添加到.gitignore中,防止敏感信息提交到代码仓库。
步骤3:修改package.json脚本
根据选择的依赖方式,二选一配置:
方式一:使用dotenv + cross-env(无需额外安装dotenv-cli)
利用Node.js的-r参数预加载dotenv模块,直接读取.env变量:
{ "scripts": { "test": "cross-env-shell \"node -r dotenv/config -e 'console.log(`Hello ${process.env.ACCESS_TOKEN}`)'\"", "rover:run": "cross-env-shell \"node -r dotenv/config rover <你的Rover命令>\"" } }
方式二:使用dotenv-cli + cross-env(脚本更简洁)
dotenv-cli会自动加载.env文件,再通过cross-env保证跨系统兼容:
{ "scripts": { "test": "dotenv cross-env echo Hello $ACCESS_TOKEN", "rover:run": "dotenv cross-env rover <你的Rover命令>" } }
验证效果
执行测试脚本:
npm run test
此时会输出:
Hello jdaksc8ds7vp98vwy8
说明.env变量已成功加载,后续运行Apollo Rover命令时,即可直接使用$ACCESS_TOKEN,cross-env会自动处理类Unix与Windows系统的语法差异。
内容的提问来源于stack exchange,提问作者ChazUK
相关产品推荐
相关产品推荐

