.npmrc 忽略了私有包

Posted

技术标签:

【中文标题】.npmrc 忽略了私有包【英文标题】:.npmrc ignored private package 【发布时间】:2021-06-17 00:29:59 【问题描述】:

我正在尝试在 gitlab 私有实例上使用我的第一个私有 npm 包

我将@ajouve:registry=https://gitlab.my-website.io/api/v4/packages/npm/ 添加到.npmrc

npm get 命令似乎返回了正确的配置

; "project" config from /Volumes/Work/service/.npmrc

@ajouve:registry = "https://gitlab.my-website.io/api/v4/packages/npm/" 

; "cli" config from command line options

omit = [] 
user-agent = "npm/7.5.4 node/v12.18.1 darwin x64" 

; node bin location = /usr/local/bin/node
; cwd = /Volumes/Work/service
; HOME = /Users/ajouve
; Run `npm config ls -l` to show all defaults.

但是当我想添加包时

npm install --save @ajouve/my-module

我有

npm ERR! code E404
npm ERR! 404 Not Found - GET https://registry.npmjs.org/@ajouve/my-module Not found
npm ERR! 404 
npm ERR! 404  '@ajouve/my-module@*' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
npm ERR! 404 
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/ajouve/.npm/_logs/2021-03-19T15_06_50_186Z-debug.log

转到https://registry.npmjs.org

运行npm config ls -l | grep registry

我有

metrics-registry = "https://registry.npmjs.org/"
registry = "https://registry.npmjs.org/"
@ajouve:registry = "https://gitlab.my-website.io/api/v4/packages/npm/"

【问题讨论】:

您好,您可以尝试更新注册表字段吗? @MohitSahu 更新 .npmrc ?我也尝试只设置 registry=https://gitlab.my-website.io/api/v4/packages/npm/ 但同样的问题 你可以在运行命令时检查注册表字段 - npm config ls -l @MohitSahu 我更新了帖子 【参考方案1】:

你可以试试这个:

npm config set registry http://registry.npmjs.org

npm-registry

或者有时您只需要添加用户和登录即可使用私有包解决此问题。看看这个文档:npm-addUser

命令应该是这样的:

npm adduser
npm login

【讨论】:

【参考方案2】:

作为几天前开始使用 Gitlab 注册表的人,我遇到了同样的问题。 在 .npmrc 上,范围名称必须符合您的数据包范围。 比如我们有项目A,它的package.json应该是这样的:


"name": "@myscope/myproject",
...Rest of your package.json

在您的项目 B 上,.npmrc 必须与范围匹配

@myscope:registry=https://gitlab.com/api/v4/packages/npm/

然后,确保您使用作用域注册表进行身份验证,否则 NPM 将抛出错误或忽略并在 NPM 注册表上搜索

$ npm config set @myscope:registry https://gitlab.com/api/v4/packages/npm/
$ npm config set -- '//gitlab.com/api/v4/packages/npm/:_authToken' "<your_token>"

注意: 应该是在您的 Gitlab 配置文件上创建的访问令牌。您可以通过 Preferences > Access Tokens 来创建它。确保在创建令牌之前检查“read_registry”。

然后,你就可以轻松安装你的包了

$ npm install --save @myscope/myproject

编辑:如果您使用的是自托管的 gitlab 实例,它遵循相同,只需记住将“gitlab.com”更改为您的 gitlab 实例 url。

【讨论】:

【参考方案3】:

用 git+ssh:// 代替 git://

npm i -S git+ssh://git@gitlab.com:<org>/<project>.git

在这里你可以得到几个答案

Install npm module from gitlab private repository

【讨论】:

谢谢,但这是我之前使用的解决方案。我想换成真正的注册表【参考方案4】:

第一次安装需要运行

npm config set @ajouve:registry=https://gitlab.my-website.io/api/v4/packages/npm/

【讨论】:

【参考方案5】:

试试这个,应该可以的。

npm install --save @ajouve/my-module --registry=https://gitlab.my-website.io/api/v4/packages/npm/ 

另一种方法是在私有实例中创建组端点,它将托管 + 代理指向公共包,并更新您的注册表以指向该端点,以便私有和公共包都可以工作。

【讨论】:

谢谢,但同样的问题`未找到 - GET registry.npmjs.org/@ajouve/my-module - 未找到`与npm install --save @ajouve/my-module --registry=https://gitlab.my-website.io/api/v4/packages/npm/

以上是关于.npmrc 忽略了私有包的主要内容,如果未能解决你的问题,请参考以下文章

如何设置环境变量以供 .npmrc 使用

在嵌套匿名结构上忽略 C++ 私有修饰符

在 `npm install` 之前用 dotenv 替换 .npmrc 中的 env 变量

为啥 Pip 会忽略已配置的具有嵌套依赖项的存储库?

Spring 忽略 @Transactional 注释

.npmignore 不忽略文件