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

如何结合Node.js --env-file特性与PNPM运行脚本

如何在PNPM脚本中借助Node.js的--env-file注入环境变量

场景说明

我有一个.env文件,内容如下:

STH=1

在Node.js 20中,可通过以下命令直接读取该文件的环境变量:

node --env-file=.env -e "console.log(process.env.STH)"

执行后输出:

1

现在希望让PNPM运行的脚本(比如示例中的prettier)也能访问.env中的所有环境变量,但注意--env-file参数不允许在NODE_OPTIONS中使用。

可行方案

方案1:用Node.js包裹脚本执行

利用Node.js加载环境变量后,通过子进程调用目标脚本,子进程会继承当前Node进程的环境变量。在package.json中配置脚本如下:

{
  "scripts": {
    "prettier": "node --env-file=.env -e \"require('child_process').execSync('pnpm exec prettier', { stdio: 'inherit' })\""
  }
}

执行pnpm prettier时,Node会先加载.env的环境变量,再启动prettier进程,此时prettier就能访问到STH等环境变量。

方案2:Unix-like系统下直接导出环境变量

通过Node.js读取并输出环境变量的导出语句,再通过eval执行后启动PNPM脚本:

eval $(node --env-file=.env -e "console.log(Object.entries(process.env).map(([k, v]) => `export ${k}='${v.replace(/'/g, "\\'")}'`).join('\n'))") && pnpm prettier

该命令会先让Node加载.env,然后将所有环境变量转为export语句,通过eval注入当前shell,再执行pnpm prettier,此时脚本就能访问到对应的环境变量。

注意事项

  • --env-file是Node.js 20+的特性,确保你的Node版本符合要求。
  • 如果目标脚本是Node.js编写的(而非prettier这类可执行文件),也可以直接用node --env-file=.env ./your-script.js的方式启动,但prettier这类二进制脚本需要通过子进程或shell环境继承的方式获取变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 22:58:16