.npmrc不扩展env变量

时间:2018-02-13 06:10:12

标签: npm npm-install package.json

我正在设置一个环境变量,然后在npm install期间尝试在.npmrc文件中使用它,但令牌变量似乎不可用。

这是我的脚本(config.sh):

#!/bin/sh

NPM_READ_ONLY_TOKEN=$(firebase functions:config:get npm.read_only)

export NPM_READ_ONLY_TOKEN=$(eval echo $NPM_READ_ONLY_TOKEN)

# exit 0;

这是我的package.json预安装脚本:

"preinstall: ". ./config.sh && echo $NPM_READ_ONLY_TOKEN"

我的.npmrc:

//registry.npmjs.org/:_authToken=$NPM_READ_ONLY_TOKEN

当我运行npm install时,执行预安装脚本并打印正确的令牌,但在安装过程中我得到:

npm ERR! code E404
npm ERR! 404 Not Found: @scoped/package@1.x

我开始认为该令牌实际上不可用于.npmrc文件。为了测试这个,我在postinstall脚本中回显了令牌,但它没有打印令牌。请注意,我测试时没有使用作用域包作为依赖项,因此将到达postinstall脚本。我还通过将令牌直接插入.npmrc并成功下载来验证我的包是否可用。

我挖了很多,发现了this帖子。在.npmrc文件中的变量名称周围添加花括号不会修复它,实际上会打破它。我相信不使用花括号是正确的方法(这也是在git问题中指出的。)

什么原因导致我的.npmrc无法获取环境变量?

1 个答案:

答案 0 :(得分:0)

这种技巧可以解决问题:

#!/bin/bash

echo 'Setting up development env';

NPM_READ_ONLY_TOKEN=$(firebase functions:config:get npm.read_only)
NPM_READ_ONLY_TOKEN=$(eval echo $NPM_READ_ONLY_TOKEN)
rm -f ./.npmrc
echo "//registry.npmjs.org/:_authToken=${NPM_READ_ONLY_TOKEN}" > .npmrc

# exit 0;