无法将GitHub Actions环境变量传递至Node.js脚本
解决GitHub Actions环境变量传递到Node.js脚本的问题
你遇到的undefined问题,核心原因要么是脚本没正确读取命令行参数,要么是误用了GitHub Actions的环境变量(比如你用的GITHUB_ACTION是当前动作的名称,不是构建编号,应该用GITHUB_RUN_NUMBER才对)。下面给你两种不需要中间文件的简洁解决方案:
方案一:正确解析命令行参数
先把GitHub Actions里的调用参数换成正确的构建编号变量,再在Node.js脚本里解析参数格式:
1. 调整GitHub Actions的run片段
run: | npm install # 用GITHUB_RUN_NUMBER(仓库工作流的递增构建号)作为构建编号 node setbuildnumber.js build=${{ env.GITHUB_RUN_NUMBER }} npm run build-demo
2. 修改Node.js脚本(setbuildnumber.js)
const fs = require('fs'); const path = require('path'); // 解析命令行参数:跳过node和脚本路径,取后面的参数 const args = process.argv.slice(2); const buildArg = args.find(arg => arg.startsWith('build=')); if (buildArg) { // 提取构建编号值 const buildNumber = buildArg.split('=')[1]; // 替换为你的环境配置文件路径(比如生产环境的prod配置) const envFilePath = path.join(__dirname, 'src/environments/environment.prod.ts'); // 读取并替换配置字段 let envContent = fs.readFileSync(envFilePath, 'utf8'); // 匹配buildNumber字段(兼容空字符串、undefined等写法) envContent = envContent.replace(/buildNumber: ['"]?[^'"]*['"]?/, `buildNumber: '${buildNumber}'`); fs.writeFileSync(envFilePath, envContent); console.log(`构建编号已设置为:${buildNumber}`); } else { console.error('未传入有效的build参数'); }
方案二:直接通过环境变量传递(更简洁)
把构建编号设为Node.js可直接读取的环境变量,不需要解析命令行参数:
1. 调整GitHub Actions的run片段
run: | npm install # 把构建编号注入到Node.js的环境变量中 BUILD_NUMBER=${{ env.GITHUB_RUN_NUMBER }} node setbuildnumber.js npm run build-demo
2. 修改Node.js脚本(setbuildnumber.js)
const fs = require('fs'); const path = require('path'); // 直接从Node.js环境变量中读取 const buildNumber = process.env.BUILD_NUMBER; if (buildNumber) { const envFilePath = path.join(__dirname, 'src/environments/environment.prod.ts'); let envContent = fs.readFileSync(envFilePath, 'utf8'); envContent = envContent.replace(/buildNumber: ['"]?[^'"]*['"]?/, `buildNumber: '${buildNumber}'`); fs.writeFileSync(envFilePath, envContent); console.log(`构建编号已设置为:${buildNumber}`); } else { console.error('BUILD_NUMBER环境变量未正确设置'); }
额外注意事项
- 确认环境变量正确性:
GITHUB_RUN_NUMBER是仓库每次工作流运行的递增编号,是最适合作为构建号的变量;GITHUB_ACTION是当前执行的动作名称(比如actions/checkout@v4),不要用错。 - 配置文件路径匹配:脚本里的路径要和你的项目结构一致,比如开发环境用
environment.ts,生产环境用environment.prod.ts,要对应你构建命令的目标环境。 - 验证变量值:可以在GitHub Actions的run步骤中加一行
echo ${{ env.GITHUB_RUN_NUMBER }},确认变量有值;脚本里也可以加console.log(buildNumber),验证读取是否成功。
内容的提问来源于stack exchange,提问作者Constantine Rafikov
相关产品推荐
相关产品推荐

