将作用域npm注册表URL定义为环境变量

将作用域npm注册表URL定义为环境变量,npm,travis-ci,Npm,Travis Ci,我们有一个作用域模块,npm要解决它,我们必须说明它的回购协议在哪里。这可以在.npmrc中完成,例如: @my-scope:registry=http://my-sweet-replication.example.com/npm/ 我的问题是,由于GET请求的代理和身份验证,我必须在.npmrc中输入不同的值,用于开发和构建服务器(travis enterprise)。我们已经利用了这样一个事实,npm可以读取未限定范围的包的环境变量,但由于@和:都是环境变量中的无效字符,我无法导出正确的U

我们有一个作用域模块,
npm
要解决它,我们必须说明它的回购协议在哪里。这可以在
.npmrc
中完成,例如:

@my-scope:registry=http://my-sweet-replication.example.com/npm/
我的问题是,由于GET请求的代理和身份验证,我必须在
.npmrc
中输入不同的值,用于开发和构建服务器(travis enterprise)。我们已经利用了这样一个事实,
npm
可以读取未限定范围的包的环境变量,但由于
@
都是环境变量中的无效字符,我无法导出正确的URL


关于如何告诉npm在哪里查找作用域模块而不将其放入
.npmrc

目前,我的解决方案是使用
env
命令,即(在
.travis.yml
中)

这是唯一的办法吗

将其放入travis
env
矩阵不起作用,因为它使用
EXPORT
,因此它尝试只导出
注册表


(发布我的答案,因为我没有从谷歌上得到任何点击)

通过安装带有相应令牌的
~/.npmrc
手动创建用户

首先,进入项目的envvars,并在某个名称下设置令牌。对于这个例子,我使用了
NPM_令牌
,但这并不重要。有些Unice使用小写的envvars,所以使用allcaps

接下来将以下内容添加到
.travis.yml

before_install:
  - echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > ~/.npmrc

现在,您应该有一个具有适当凭据的NPM用户。

我在这方面也遇到了困难。选择使用特殊字符,如
@
,非常麻烦,因为这些字符不是有效的环境变量字符。难道没有办法摆脱坏角色吗?
before_install:
  - echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > ~/.npmrc