通过 Typescript 脚本设置环境变量

Set environment variable through Typescript script

我想在构建时创建一个散列并将其设置为环境变量。它应该可以被节点访问。

首先我写了一个bash脚本,在脚本中导出环境变量并在package.json中获取它。 问题是节点不知道 source 命令。 现在我用 Typescript 重写了脚本(由于整个项目使用 TS 而不是 JS)。 在脚本中我将变量设置如下:

process.env.VARIABLE = hashFunction(path);

函数在package.json

中通过脚本调用
"hash": "ts-node path/to/script.ts"

函数正常运行,但未设置环境变量。有人可以帮我解决这个问题吗?是否可以 return 脚本外部的字符串并从那里设置它?

如果可能的话,我不想使用外部包。

谢谢:)

更新:

我使用了 bash 脚本,但使用 typescript 脚本它的工作方式相同。对于 bash,console.log 替换为 echo

script.ts

console.log("2301293232") // The hash created by the script

package.json

"scripts": {
    "build": "yarn run hash react-scripts build", // omit &&
    "hash": "ENV_VAR=$(ts-node script.ts)"
}

所以我做了以下事情: 脚本 return 将校验和发送到 console/standard 输出。但是我之前会捕获它并将打印的值设置为 package.json 文件中的环境变量。只要它与启动构建的过程相同,这就会起作用。 这就是为什么

"scripts": {
    "build": "yarn run hash && react-scripts build"
}

也不

"scripts": {
    "build": "react-scripts build",
    "prebuild": "ENV_VAR=$(ts-node script.ts)"
}

会起作用。在这两个示例中,将启动一个新进程,并且环境变量将丢失。

无法(轻松)更改父进程的环境变量

您可以 change/set 当前 运行ning 进程的环境。这意味着当 ts-node 运行 是您的程序时,您正在更改脚本和 ts-node.

的环境变量

脚本完成 运行ning 后,ts-node 停止,环境更改丢失。他们不会传回 shell.

正在更改另一个进程的环境

更改父进程(shell)的环境变量是一个复杂得多的过程,并且取决于您的 OS 和是否具有正确的权限。对于 linux,列出了一种这样的技术 here. In Windows, you can find some hints by looking at this question

其他选项

您的另一个选择可能是 return 您的 shell 理解的字符串,并且 运行 那个。