如何在本地将Node版本传入React环境变量?
解决Windows本地npm脚本中获取Node版本作为环境变量的问题
你遇到的报错本质是Windows命令行(cmd/PowerShell)不支持类Unix Shell(如Bash)的反引号命令替换语法——Jenkins用的是Bash,所以export REACT_APP_NODE_VERSION=node --version``能正常工作,但Windows会把node -v拆成单独的-v命令执行,导致抛出找不到命令的错误。
以下是几种可行的本地解决方案:
方案1:改用cross-env-shell替代cross-env
cross-env仅负责跨平台设置环境变量,不处理Shell语法;而cross-env-shell会调用系统默认Shell解析整个命令,支持命令替换。
修改package.json中的脚本:
"start:app": "cross-env-shell REACT_APP_APPENV=local REACT_APP_NODE_VERSION=`node -v` react-scripts start"
如果你的默认Shell是PowerShell,需要把反引号换成PowerShell的命令替换语法$():
"start:app": "cross-env-shell REACT_APP_APPENV=local REACT_APP_NODE_VERSION=$(node -v) react-scripts start"
方案2:用Node.js脚本前置处理环境变量
写一个简单的Node.js脚本,提前获取Node版本并设置环境变量,再启动项目:
- 在项目根目录创建
set-env.js文件:
const { execSync, spawn } = require('child_process'); // 设置环境变量 process.env.REACT_APP_APPENV = 'local'; process.env.REACT_APP_NODE_VERSION = execSync('node -v').toString().trim(); // 启动React项目 spawn('react-scripts', ['start'], { stdio: 'inherit', // 继承控制台输入输出 env: process.env });
- 修改
package.json的脚本:
"start:app": "node set-env.js"
方案3:Windows CMD专用语法(仅适用于CMD)
如果你的本地默认是CMD命令行,可以用CMD的for /f语法捕获命令输出:
"start:app": "for /f \"tokens=*\" %%v in ('node -v') do set REACT_APP_NODE_VERSION=%%v && cross-env REACT_APP_APPENV=local react-scripts start"
注:npm脚本中需要把CMD的单个%替换成%%才能正常解析。
内容的提问来源于stack exchange,提问作者Carlos Jaime C. De Leon
相关产品推荐
相关产品推荐

