【发布时间】:2021-09-12 19:21:54
【问题描述】:
考虑以下内容。
node file1.js && react-scripts start
我正在尝试对 file1.js 中的 GCP Secret Manager 进行 API 调用。收到请求后,我想将它们设置为process.env下的环境变量。之后,我想在前端访问它们。浏览器无法在没有 OAuth 的情况下调用该 Secret Manager。有什么方法可以在这两个脚本之间共享 process.env 吗?
文件1代码
const {SecretManagerServiceClient} = require('@google-cloud/secret-manager');
// Instantiates a client
const client = new SecretManagerServiceClient();
const firebaseKeysResourceId = 'URL'
const getFireBaseKeys=async()=> {
const [version] = await client.accessSecretVersion({
name: firebaseKeysResourceId,
});
// Extract the payload as a string.
const payload = JSON.parse(version?.payload?.data?.toString() || '');
process.env.TEST= payload.TEST
return payload
}
getFireBaseKeys()
【问题讨论】:
-
不可能像这样通过 shell 直接共享数据。你可以: 1. 让
file1.js打印可导出的值,然后你可以source或eval它像source $(node file1.js); react-scripts start2. 让file1.js写入磁盘并从磁盘源。 3. 在它自己的子进程中制作file1.jsexec react-scripts,它可以在其中生成环境。 -
环境变量可以向下填充但不能向上填充。正如sethvargo 所说,您最好的选择可能是从
file1.js生成react-scripts,默认情况下,子进程将继承父进程的环境。另一种选择是让file1.jsonly 打印 OAUTH 密钥并像这样运行它以传入名为 OAUTH 的环境变量:OAUTH=$(node file1.js) ./react-scripts start -
@leitning 你能扩展更多关于子进程的内容吗?由于文件是异步的,我认为您的第二个选项不会起作用。添加代码。
-
生成进程始终是异步的,第二个选项将起作用,因为 bash 将等待
$(...)内部的进程完成后再继续。child_process.spawn上的文档在这里 nodejs.org/docs/latest-v14.x/api/… -
@leitning 在第二个选项中,会有 5-6 个 env 变量。我需要单独设置它们吗?
标签: node.js google-cloud-platform package.json google-secret-manager