在package.json中设置环境变量

3

我有一个单一的环境变量需要在preinstall期间设置(我的npm令牌需要在.npmrc中使用以获取私有软件包)。这个特定的环境变量存储在我正在使用的配置服务(Firebase)中,因此需要从服务中获取并添加到环境中。

我尝试过各种方式,例如在节点脚本中获取它并尝试通过stdout捕获:

const { spawnSync } = require( 'child_process' );
const ls = spawnSync( 'firebase', [ 'functions:config:get', 'npm.read_only' ] );

JSON.parse(ls.stdout.toString());
// Printing this shows the correct token

我最新的尝试是这样的:

#!/bin/sh

echo 'Setting up development env';

NPM_READ_ONLY_TOKEN=`firebase functions:config:get npm.read_only`

export NPM_READ_ONLY_TOKEN=$(eval echo $NPM_READ_ONLY_TOKEN)

echo 'NPM_READ_ONLY_TOKEN => '$NPM_READ_ONLY_TOKEN;
# Prints the correct token on the screen

exit 0;

但是,当运行"./configEnv.sh && echo $NPM_READ_ONLY_TOKEN"命令时,环境变量为空。

我该怎么做才能实现呢?

1个回答

1
如果我理解你的问题正确,你希望通过执行configEnv.sh来获取你的令牌,然后在下游使用该令牌。你现在遇到的问题与环境变量范围有关,它被限制在当前进程(以及它的子进程,如果变量被导出)中。环境变量永远无法传播回父shell。当执行list ./configEnv.sh && echo $TOKEN时,configEnv.sh在自己的(单独的)子shell中执行,所以列表中的下一个进程(echo ..)不会接收到你设置的令牌。解决这个问题的一种方法是在同一个shell中执行你的令牌获取(和设置)例程,只需通过对configEnv.sh进行源化即可。
#!/bin/sh
# Usage: . configEnv.sh
echo 'Setting up development env';
export NPM_READ_ONLY_TOKEN=$(firebase functions:config:get npm.read_only)

接着在同一个shell(或其子进程)中使用该令牌:

. configEnv.sh && echo "$NPM_READ_ONLY_TOKEN"

1
搞定了。我之前不知道可以这样引用文件。非常感谢! - skwny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接