【问题标题】:How can my script read the updated value of an environment variable (updated by another process)?我的脚本如何读取环境变量的更新值(由另一个进程更新)?
【发布时间】:2020-12-01 09:29:26
【问题描述】:

我有以下节点脚本等待环境变量更改值:

// 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

如果无法从我的节点脚本中访问新的环境变量,有没有办法至少可以修改我的命令行以达到相同的结果?

【问题讨论】:

    标签: node.js environment-variables


    【解决方案1】:

    环境变量 URL 正在被另一个进程更新,所以我的节点脚本似乎永远无法访问 process.env.URL 的新值。

    没错。环境变量对每个进程都是私有的;不是全球性的。一个进程只能直接修改它的环境变量。它还可以控制它启动的任何进程的环境变量。但它不能直接修改不同进程的环境变量。您正在尝试以它们并非旨在适应的方式使用 env var。

    您必须使用某种形式的 IPC 将更改后的环境变量从进程 A 传递到进程 B。

    【讨论】:

      【解决方案2】:

      我最终做的是从 wait-for-url.js 生成一个子进程来运行测试。子进程可以访问与主进程相同的环境变量。

      【讨论】:

        猜你喜欢
        • 2016-10-20
        • 1970-01-01
        • 2017-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-05
        • 1970-01-01
        相关资源
        最近更新 更多