通过 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 理解的字符串,并且 运行 那个。
我想在构建时创建一个散列并将其设置为环境变量。它应该可以被节点访问。
首先我写了一个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 理解的字符串,并且 运行 那个。