如何在同一npm注册表为不同作用域配置不同登录令牌?
解决同一npm注册表下不同作用域配置不同AuthToken的问题
你的问题出在配置格式上——你把registry地址和_authToken拼接在了同一行,npm无法正确解析这个格式,自然会返回405错误。下面是正确的配置方式:
正确的.npmrc配置格式
你需要分别为每个作用域声明registry,然后针对同一注册表路径,为每个作用域单独指定authToken,格式如下:
# 先声明两个作用域都指向npm官方注册表 @scope1:registry=https://registry.npmjs.org/ @scope2:registry=https://registry.npmjs.org/ # 为每个作用域单独配置对应的authToken //registry.npmjs.org/:_authToken@scope1=${TOKEN_1} //registry.npmjs.org/:_authToken@scope2=${TOKEN_2}
为什么这个格式有效?
npm支持通过在_authToken后添加@作用域后缀的方式,为同一注册表的不同作用域绑定独立的认证令牌。这样当npm请求@scope1下的包时,会自动使用TOKEN_1,请求@scope2的包时使用TOKEN_2。
用命令行配置更省心
如果你不想手动编辑.npmrc文件,可以用npm config命令直接设置:
# 配置scope1的registry和令牌 npm config set @scope1:registry https://registry.npmjs.org/ npm config set //registry.npmjs.org/:_authToken@scope1 ${TOKEN_1} # 配置scope2的registry和令牌 npm config set @scope2:registry https://registry.npmjs.org/ npm config set //registry.npmjs.org/:_authToken@scope2 ${TOKEN_2}
配置完成后,你可以运行npm config list查看配置是否生效,然后尝试安装对应作用域的包验证认证是否正常。
内容的提问来源于stack exchange,提问作者fragile_frogs




