处理package.json中的环境变量

问题描述 投票:0回答:1

Stack 社区您好,

我很想实现一些简单的事情:

    "loadKey": "export GITLAB_KEY=123 || set GITLAB_KEY=123",
    "echoKey": "echo ${GITLAB-KEY}",

使其既跨操作系统兼容,又最少安装额外的软件包。我明白了,这个主题已经被处理了多次,更新也多次,所以也许是时候得到一些最终的解决方案了?

我所能得到的最接近的是:

    "loadKey": "cross-env GITLAB_KEY=22 npm run pp4",
    "echoKey": "cross-env-shell \"echo $TEST\""

问题:

  1. 是否可以在不任何外部 npm dev 依赖项的情况下获得此行为?

  2. 为什么

    &&

    在这个结构中具有如此大的破坏性?这会起作用:

"load": "cross-env GITLAB_KEY=22", "echo": "cross-env-shell \"echo $GITLAB_KEY\"", "loadAndEcho": "npm run load npm run echo"
但这不会:

"load": "cross-env GITLAB_KEY=22", "echo": "cross-env-shell \"echo $GITLAB_KEY\"", "loadAndEcho": "npm run load && npm run echo"
我注意到,使用 

&&

 echo scritp 将访问全局设置的 evn 变量,就像直接从 BASH 
set GITLAB_KEY=GLOBAL
 一样,我很想了解原因和区别。

npm package.json
1个回答
0
投票
在处理 Node.js 环境中的环境变量和操作系统之间的兼容性时,重要的是要考虑命令在不同平台上执行方式的差异。 “cross-env”包通常用于以跨平台的方式设置环境变量。

对于带有“&&”的行为,其在此上下文中的意义在于命令执行的顺序。当使用“npm run load && npm run echo”时,echo 命令在单独的 shell 中执行,该 shell 可能无法访问上一个命令中设置的环境变量。此行为是由于 && 在 npm run 脚本上下文中的工作方式的本质造成的。

"loadAndEcho": "node -e \"console.log(process.env.GITLAB_KEY)\""
这种方式直接使用 Node.js 访问环境变量,无需依赖外部 npm dev 依赖。它提供了一种独立于平台的方式来使用“cross-env”或任何其他方法访问一组环境变量。

© www.soinside.com 2019 - 2024. All rights reserved.