gpt4 book ai didi

node.js - 在 package.json 中设置环境变量

转载 作者:行者123 更新时间:2023-12-02 02:57:04 29 4
gpt4 key购买 nike

我有一个环境变量需要在 preinstall 期间设置(.npmrc 中需要我的 npm token 来获取私有(private)包)。这个特定的环境变量存储在我正在使用的配置服务 (Firebase) 中,因此需要从服务中获取它,然后将其添加到环境中。

我已经尝试了各种方式,例如在 Node 脚本中获取它并尝试通过 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" 时,环境变量是空的。

我怎样才能做到这一点?

最佳答案

如果我没看错您的问题,您希望通过执行 configEnv.sh 获取您的 token ,然后在流中使用该 token 。

您现在遇到的问题与环境变量的范围被限制在当前进程(及其子进程,如果变量被exported)有关。环境变量永远无法传播回父 shell。

执行您的 list./configEnv.sh && echo $TOKEN, configEnv.sh 在它自己的(单独的)子 shell 中执行,所以列表中的下一个进程(echo .. ) 没有收到您设置的 token 。

解决此问题的一种方法是在同一个 shell 中执行 token 获取(和设置)例程,只需获取 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(或其子 shell)中使用 token :

. configEnv.sh && echo "$NPM_READ_ONLY_TOKEN"

关于node.js - 在 package.json 中设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48739144/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com