.npmrc 配置文件不读取环境变量来下载私有节点模块

Bri*_*lip 1 environment-variables node.js npm

当我将我的身份验证令牌硬编码到我的 .npmrc 文件中时,私有模块会按预期安装。

当我用环境变量替换硬编码令牌时,私有模块无法安装。

由于以下资源,我尝试了多种编写变量名称的方法,以及 .npmrc 文件中变量的语法:

示例 .npmrc 文件:

@fortawesome:registry=https://npm.fontawesome.com/
//npm.fontawesome.com/:_authToken=$NPM_TOKEN
Run Code Online (Sandbox Code Playgroud)
@fortawesome:registry=https://npm.fontawesome.com/
//npm.fontawesome.com/:_authToken=${NPM_TOKEN}
Run Code Online (Sandbox Code Playgroud)
@fortawesome:registry=https://npm.fontawesome.com/
//npm.fontawesome.com/:_authToken=${npm_token}
Run Code Online (Sandbox Code Playgroud)
@fortawesome:registry=https://npm.fontawesome.com/
//npm.fontawesome.com/:_authToken=$npm_token
Run Code Online (Sandbox Code Playgroud)

并且,示例 .env 文件,在值周围带有和不带有字符串:

npm_config_npm_token=ABC123
Run Code Online (Sandbox Code Playgroud)
npm_token=ABC123
Run Code Online (Sandbox Code Playgroud)
NPM_CONFIG_NPM_TOKEN=ABC123
Run Code Online (Sandbox Code Playgroud)
NPM_TOKEN=ABC123
Run Code Online (Sandbox Code Playgroud)

没有任何效果。

有什么线索吗?

编辑

我正在使用 npm v6.9.0。

Bri*_*lip 5

我找出了我假设中的错误,并找到了解决方案。

tl;dr - 创建基于 shell 的持久环境变量,并在 .npmrc 文件中使用花括号变量语法。

错误是假设 npm 读取项目 .env 文件。显然 npm 不会读取位于项目根目录中的 .env 文件。

我希望 npm 从 .env 文件中读取,以便我可以保留项目中包含的项目的所有相关数据。

相反,我创建了一个始终可用的基于 shell 的环境变量。以下代码块显示了如何将环境变量添加到您的 (oh-my-zsh) shell,即使您 git watch 并发布您的 dot 文件。

# ~/.oh-my-zsh/custom/env.zsh
# be sure this file is gitignored!

export TOKEN="ABC123"
Run Code Online (Sandbox Code Playgroud)
# ~/.zshrc

source $ZSH/custom/env.zsh
Run Code Online (Sandbox Code Playgroud)
# example .npmrc

@fortawesome:registry=https://npm.fontawesome.com/
//npm.fontawesome.com/:_authToken=${TOKEN}
Run Code Online (Sandbox Code Playgroud)

多亏了这个 npm 论坛的回答,它促使我转向这个基于 shell 的解决方案。


PS -因为本机OS Xman的网页文件exportsourcebuiltin类,实际上没有提供关于每个命令是如何工作的,这里有链接,每个人页面的任何细节: