我的方法与@uidevthing的答案略有不同。我不想用环境变量设置来污染package.json文件。
你只需运行另一个脚本,将这些环境变量保存到项目根目录下的.env文件中。就是这样。
在下面的示例中,我将使用typescript,但无论如何都应该很容易转换为javascript。
package.json
如果您使用javascript,则为node scripts/start.js
...
"start": "ts-node scripts/start.ts && react-scripts start",
脚本/start.ts
创建一个新的脚本文件scripts/start.ts
const childProcess = require("child_process");
const fs = require("fs");
function writeToEnv(key: string = "", value: string = "") {
const empty = key === "" && value === "";
if (empty) {
fs.writeFile(".env", "", () => {});
} else {
fs.appendFile(".env", `${key}='${value.trim()}'\n`, (err) => {
if (err) console.log(err);
});
}
}
writeToEnv();
childProcess.exec("git rev-parse --abbrev-ref HEAD", (err, stdout) => {
writeToEnv("REACT_APP_GIT_BRANCH", stdout);
});
childProcess.exec("git rev-parse --short HEAD", (err, stdout) => {
writeToEnv("REACT_APP_GIT_SHA", stdout);
});
export {};
上述代码将设置环境变量并将它们保存到根文件夹下的.env
文件中。它们必须以REACT_APP_
开头。React脚本在构建时自动读取.env
,并将它们定义在process.env
中。
App.tsx
...
console.log('REACT_APP_GIT_BRANCH', process.env.REACT_APP_GIT_BRANCH)
console.log('REACT_APP_GIT_SHA', process.env.REACT_APP_GIT_SHA)
结果
REACT_APP_GIT_BRANCH master
REACT_APP_GIT_SHA 042bbc6
更多参考资料:
"start": "REACT_APP_GIT_SHA=\
git rev-parse --short HEAD` react-scripts start"` - Bohdan Ganickynpm
配置,cross-env
将无法工作;请参见此处:https://github.com/kentcdodds/cross-env/issues/192#issuecomment-513341729 - TranquilMarmotgit rev-parse --short HEAD
react-scripts start"。我该如何在Windows命令提示符中运行此命令? - Rohit Vyas