gpt4 book ai didi

node.js - 将 .npmrc 中的 env 变量替换为 `npm install` 之前的 dotenv

转载 作者:行者123 更新时间:2023-12-02 11:18:50 26 4
gpt4 key购买 nike

我必须使用私有(private)注册表中的一些包。所以,在我的 package.json在依赖项部分,我有这样一行:

...
"dependencies": {
"@myco/my-awesome-package": "^0.4.5",
...
}
...

私有(private)注册表需要身份验证,所以我必须创建 .npmrc我的项目中的文件:
registry=https://registry.npmjs.org/
@myco:registry=https://myco-registry-path/
//myco-registry-path/:username=${MYCO_REGISTRY_USER}
//myco-registry-path/:_password=${MYCO_REGISTRY_PASSWORD_BASE64}

是的,我知道 _authToken ,但在我的情况下,使用用户和密码更容易。

无论如何,在这里你可以看到两个环境变量: ${MYCO_REGISTRY_USER}${MYCO_REGISTRY_PASSWORD_BASE64}我必须替换 之前 npm install .
我知道这个问题的非常简单的解决方案:将它们放入“全局”环境变量中,例如放入我的 .bash_profile (或您选择的任何终端配置文件)。
但我不想将这样的变量保留在“全局”范围内,因为它们仅对当前项目很重要。我想做的是使用 dotenv .我想创建一个 .env我项目根目录中的文件:
MYCO_REGISTRY_USER=myco-registry-username-value
MYCO_REGISTRY_PASSWORD_BASE64=myco-registry-password-value-base64

我希望这些值替换我的 .npmrc 中的环境变量关于安装 Action 。但是当我尝试 npm install我收到一个错误: Error: Failed to replace env in config: ${MYCO_REGISTRY_USER} .我能理解为什么会这样。可能是因为 npm 读取 .npmrc首先取值并尝试替换 env 变量并失败,因为此时它对 dotenv 一无所知。
我的问题是如何处理它?

简短的摘要:
  • 我不想将环境变量保留在终端配置文件中,而是将其放在 .env 中我的项目中的文件。
  • 我必须替换 .npmrc 中的环境变量带有 dotenv 的文件 之前 npm install
  • 最佳答案

    我知道这个答案可能来得太晚了,但如果其他人正在寻找答案,这里有一个解决方案:

    您需要在脚本前加上 dotenv-cli像这样:

    dotenv npm install

    或者在我的情况下文件不是 .env :
    dotenv -e .env.local npm install

    问题是您无法将其保存在任何地方,以便有人可以以某种方式将其与“npm install”一起使用。绝对 npm preinstall在阅读 .npmrc 后运行所以它也失败了。

    您将需要很好地记录它或只包含一个小的 shell 脚本,但如果您支持不同的操作系统,那么它会很快变得有趣......

    令人高兴的是,像 Netlify 这样的 CD 平台允许您手动设置环境变量。

    但我想如果有人克隆了你的 repo 并且他们得到的第一个是失败的 npm install,这一定不是最好的开始。 🤷‍♂️

    另外,看看这个: locking-the-vault-on-font-awesome-npm-tokens

    关于node.js - 将 .npmrc 中的 env 变量替换为 `npm install` 之前的 dotenv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55801074/

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