我具有以下等待环境变量更改值的节点脚本:
// wait-for-url.js
(async function () {
console.log('Waiting for a complete URL...');
while (true) {
const url = process.env.URL;
const isUrlIncomplete = url.includes('..creating..');
if (isUrlIncomplete) {
console.log(
`URL is still being provisioned (${url}). Trying again in 1 minute.`,
);
await sleep(60000);
} else {
console.log('URL is fully provioned!');
break;
}
}
})();
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
环境变量URL正在由另一个进程更新,因此看来我的节点脚本永远无法访问process.env.URL的新值。
我的脚本如何读取由我无法控制的另一个进程设置的环境变量的新值?
确实,我想做的是等待URL env变量被设置,并在它运行后跟随它进行运行测试:
node scripts/wait-for-url.js && npm run test
如果没有办法从节点脚本内部访问新的env变量,是否有办法至少可以修改命令行以达到相同的结果?
环境变量URL正在由另一个进程更新,因此看来我的节点脚本永远无法访问process.env.URL的新值。
那是正确的。环境变量是每个过程专用的。不是全球性的。进程只能直接修改其环境变量。它还可以控制它启动的任何进程的环境变量。但是它不能直接修改其他进程的环境变量。你正在尝试以一种并非旨在容纳它们的方式来使用env vars。
你必须使用某种形式的IPC来将更改后的环境变量从流程A传递到流程B。