如何为私有注册表设置npm

问题描述 投票:0回答:1

我有公司管理的私人 npm 注册表(在 nexus 中),并通过 ssl 证书进行保护。我可以通过浏览器访问它,也可以使用带有我个人证书的curl来访问它。

例如,这是有效的,我可以获取包内容,所以我想我的证书没问题:

curl -vvv https://example.com/repository/group/example-package --cert my.crt --key my.key

但是当我使用

npm i
时,我以错误结束

npm i example-package --registry https://example.com/repository/group/ --certfile=my.crt --keyfile=my.key --verbose --strict-ssl=true

errno UNABLE_TO_GET_ISSUER_CERT_LOCALLY

这是一个非常著名的错误,大多数答案是将 strict-ssl 设置为 false,但通过这个选项我得到了。

npm http fetch GET 401  https://example.com/repository/group/example-package 318ms (cache skip)
...
npm ERR! code E401
npm ERR! 401 Unauthorized 

我尝试了可与此一起使用的所有参数组合(--cafile、--certfile、--keyfile),但结果始终相同。我是不是错过了什么?

npm npm-install npm-private-modules
1个回答
0
投票

似乎一种可行的解决方案是使用 .npmrc 并将 URI 片段前缀到证书变量(没有

https://
部分的 URL)。

.npmrc

registry=https://example.com/repository/group/
//example.com/repository/group/:keyfile=/absolute/path/to/my.key
//example.com/repository/group/:certfile=/absolute/path/to/my.crt

现在简单的

npm i <package_name>
工作,不需要
--strict-ssl=false
或设置
NODE_TLS_REJECT_UNAUTHORIZED
NODE_EXTRA_CA_CERTS
环境变量(ssl问题的流行解决方法)。

另一个选项是使用 npm config (仍然需要 URI 片段前缀)。请记住,如果 URI 前缀无效或 crt 文件不存在(或路径无效),npm 不会抛出任何错误。

npm config set //example.com/repository/group/:keyfile=/absolute/path/to/my.key
npm config set //example.com/repository/group/:certfile=/absolute/path/to/my.cert

.npmrc 文档

npm 配置文档

© www.soinside.com 2019 - 2024. All rights reserved.