我必须使用私有注册表中的一些包。因此,在我package.json
的依赖项部分中,我有这样一行:
...
"dependencies": {
"@myco/my-awesome-package": "^0.4.5",
...
}
...
私有注册表需要身份验证,所以我必须.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}
无论如何,在这里你可以看到两个 env 变量:${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
的安装操作中的环境变量。但是当我尝试时,npm install
我得到一个错误:Error: Failed to replace env in config: ${MYCO_REGISTRY_USER}
。我能理解为什么会这样。可能是因为 npm.npmrc
先读取值并尝试替换 env 变量并失败,因为此时它对 dotenv 一无所知。我的问题是如何处理它?
简短的摘要:
我不想将环境变量保留在终端配置文件中,而是想将它
.env
放在我项目中的文件中。我必须先用 dotenv 替换文件中的env
.npmrc
变量npm install