我正在设置一个环境变量,然后在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无法获取环境变量?
答案 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;