有没有办法运行一个自终止的js脚本,可以传递变量给下一个?
Is there a way to run a self-terminating js script that can pass variables to the next?
我真的很想让我的一些 secrets/keys 是可迭代的,因为我有越来越多的外部 api 键列表,如果我可以根据它们匹配它们会更容易使用在正在使用的路线上,而不必在我的应用程序开始时静态映射它们。
我认为在不在 batch/bash 文件中编写大量 JSON 单行字符串的情况下更好地组织它们的唯一方法是将其全部定义在 js 对象文字中并拥有一个 js脚本将其字符串化并将其加载到 ENV 变量中以传递给即将启动的应用程序。
NPM 预启动脚本:
const env = {
secret: 'supersecret',
key: `key
that requires
line breaks`,
apiKeys: {
'api-1':'a;sodhgfasdgflksdaj;lg',
'api-2':'ajl;sdfj;adjsfkljasd;f'
}
}
for (let x in env) {
if (typeof env[x] == 'string') {
process.env[x] = env[x];
} else {
process.env[x] = JSON.stringify(env[x])
}
console.log(x)
}
process.exit(22);
NPM 启动脚本:
const key = process.env.key
const apiKeys = JSON.parse(process.env.apiKeys)
不幸的是,ENV 变量不会保留在实例之间,所以这是无用的。
使用 STDIN 和 STDOUT 在两个脚本之间传递数据是否也安全?
我的解决方案最终是通过转换为 JSON 来管道输出,然后流式传输到 STDOUT 并在第二个脚本的 STDIN 上接收。这样做使其与平台无关,我可以在源脚本中添加任何类型的活动秘密管理(例如,接受来自各种其他秘密管理的秘密 systems/vaults 或在每次启动时生成新秘密)
发送到标准输出:
const env = {
someSecret: 'supersecret',
superSecretObject: {
moreProperties: 'data'
}
};
/* If you have an array of properties or have a very large set of secrets,
you should create a readable stream from it, and send that to stdout,
but this is much simpler */
process.stdout.write(JSON.stringify(env));
在 STDIN 上接受:
const fs = require('fs')
const env = (function () {
/* Using fs will error out on no input, but you can use process.stdin
if you don't need to suspend the whole application waiting for the input */
let envTmp = fs.readFileSync(0).toString();
envTmp = JSON.parse(envTmp);
return envTmp;
})();
我真的很想让我的一些 secrets/keys 是可迭代的,因为我有越来越多的外部 api 键列表,如果我可以根据它们匹配它们会更容易使用在正在使用的路线上,而不必在我的应用程序开始时静态映射它们。
我认为在不在 batch/bash 文件中编写大量 JSON 单行字符串的情况下更好地组织它们的唯一方法是将其全部定义在 js 对象文字中并拥有一个 js脚本将其字符串化并将其加载到 ENV 变量中以传递给即将启动的应用程序。
NPM 预启动脚本:
const env = {
secret: 'supersecret',
key: `key
that requires
line breaks`,
apiKeys: {
'api-1':'a;sodhgfasdgflksdaj;lg',
'api-2':'ajl;sdfj;adjsfkljasd;f'
}
}
for (let x in env) {
if (typeof env[x] == 'string') {
process.env[x] = env[x];
} else {
process.env[x] = JSON.stringify(env[x])
}
console.log(x)
}
process.exit(22);
NPM 启动脚本:
const key = process.env.key
const apiKeys = JSON.parse(process.env.apiKeys)
不幸的是,ENV 变量不会保留在实例之间,所以这是无用的。
使用 STDIN 和 STDOUT 在两个脚本之间传递数据是否也安全?
我的解决方案最终是通过转换为 JSON 来管道输出,然后流式传输到 STDOUT 并在第二个脚本的 STDIN 上接收。这样做使其与平台无关,我可以在源脚本中添加任何类型的活动秘密管理(例如,接受来自各种其他秘密管理的秘密 systems/vaults 或在每次启动时生成新秘密)
发送到标准输出:
const env = {
someSecret: 'supersecret',
superSecretObject: {
moreProperties: 'data'
}
};
/* If you have an array of properties or have a very large set of secrets,
you should create a readable stream from it, and send that to stdout,
but this is much simpler */
process.stdout.write(JSON.stringify(env));
在 STDIN 上接受:
const fs = require('fs')
const env = (function () {
/* Using fs will error out on no input, but you can use process.stdin
if you don't need to suspend the whole application waiting for the input */
let envTmp = fs.readFileSync(0).toString();
envTmp = JSON.parse(envTmp);
return envTmp;
})();