`npmpublish` 和 `npminstall` 失败取决于使用的 `.npmrc` 语法

2024-02-24

当前行为:

我正在尝试配置项目以安装来自 NPM 的依赖项。我将把项目作为私有包发布到 GitHub Packages。如果我在我的项目中使用这个语法.npmrc:

@my-org:registry=https://npm.pkg.github.com/

我可以使用 NPM 安装依赖项npm install在我的本地机器上。但是,我无法使用以下方式发布到 GitHub Packagesnpm publish。 NPM 通知我我未经过身份验证。如果我在我的项目中使用这个语法.npmrc:

registry=https://npm.pkg.github.com/my-org/

我可以使用发布npm publish,但我无法安装依赖项npm install。 NPM 通知我它正在尝试从 GitHub Packages 而不是 NPM 安装依赖项。

预期行为:

根据我的阅读,两种语法都应该兼容npm install and npm publish。但是,根据我的预期用途,我似乎只能使用其中之一。

重现步骤:

  1. 安装节点v15.7.0和国家公共管理7.4.3 via nvm https://github.com/nvm-sh/nvm.

  2. 使用以下命令登录 GitHub Packages:

    npm login --scope=@my-org --registry=https://npm.pkg.github.com
    
  3. 检查我们的~/.npmrc文件在我们的主文件夹中。它应该是:

    @my-org:registry=https://npm.pkg.github.com/
    //npm.pkg.github.com/:_authToken=<auth-token-used-for-login>
    
  4. 使用以下内容创建项目package.json:

    {
      "name": "@my-org/my-package",
      "description": "A test.",
      "version": "1.0.0",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "repository": {
        "type": "git",
        "url": "https://github.com/my-org/my-package.git"
      },
      "keywords": ["example"],
      "author": "Me",
      "license": "ISC",
      "bugs": {
        "url": "https://github.com/my-org/my-package/issues"
      },
      "homepage": "https://github.com/my-org/my-package",
      "dependencies": {
        "bootstrap": "^4.5.2"
      }
    }
    
  5. 添加以下内容.npmrc到我们的项目:

    @my-org:registry=https://npm.pkg.github.com/
    
  6. Run npm install。安装应该成功。

  7. Run npm publish。收到以下错误:

    npm ERR! code ENEEDAUTH
    npm ERR! need auth This command requires you to be logged in.
    npm ERR! need auth You need to authorize this machine using `npm adduser`
    
    npm ERR! A complete log of this run can be found in:
    npm ERR!     /Users/my-user/.npm/_logs/2021-01-28T20_19_55_974Z-debug.log
    
  8. 改变项目.npmrc to:

    registry=https://npm.pkg.github.com/my-org/
    
  9. Run npm publish。发布应该会成功。

  10. rm -rf node_modules/ package-lock.json在项目中。

  11. Run npm install。收到以下错误:

    npm ERR! code E401
    npm ERR! Incorrect or missing password.
    npm ERR! If you were trying to login, change your password, create an
    npm ERR! authentication token or enable two-factor authentication then
    npm ERR! that means you likely typed your password in incorrectly.
    npm ERR! Please try again, or recover your password at:
    npm ERR!     https://www.npmjs.com/forgot
    npm ERR!
    npm ERR! If you were doing some other operation then your saved credentials are
    npm ERR! probably out of date. To correct this please try logging in again with:
    npm ERR!     npm login
    
    npm ERR! A complete log of this run can be found in:
    npm ERR!     /Users/my-user/.npm/_logs/2021-01-28T20_38_20_711Z-debug.log
    

环境:

  • OS:
    • MacOS 卡塔琳娜 10.15.7
    • MacOS 大苏尔 11.1
  • 节点:15.7.0
  • npm:7.4.3

我尝试过的事情

Using publishConfig

很遗憾,publishConfig并不能解决问题。它也没有解决这两个问题.npmrc语法产生不同的结果。

Project .npmrc authToken

NPM 的文档指出不需要包含authToken在项目中.npmrc。验证方式为npm login并存储authToken在全球范围内~/.npmrc应该足够了。

解决方法

使用--registry命令行标志

我找到了解决方法,直到影响此问题的 NPM 错误得到解决。使用以下项目时.npmrc syntax:

@my-org:registry=https://npm.pkg.github.com/

如果我跑npm publish --registry=https://npm.pkg.github.com/,就可以发布成功了。此外,我可以毫无问题地安装依赖项。


更新(2021 年 5 月 30 日)

这已在 NPM 中修复7.5.3以上。

原始答案(2021年4月20日)

这已被确认为 NPM 上的错误7.x。该团队目前正在努力修复该错误GitHub 拉取请求 #2602 https://github.com/npm/cli/pull/2602。在此错误修复发布之前,最好的建议是执行下面列出的解决方法之一。

解决方法1:--registry命令行标志

跑步时npm publish,添加--registry旗帜。该标志使开发人员能够指定他们想要发布到的注册表,覆盖.npmrc or package.json配置。对于我的问题中列出的示例,该项目.npmrc应包含:

@my-org:registry=https://npm.pkg.github.com/

通过运行以下命令启动发布将成功:

npm publish --registry=https://npm.pkg.github.com/

解决方法 2:默认注册表的虚拟令牌

根据npm 开发者 wraithgar 对此 bug 的 GitHub 问题的评论 https://github.com/npm/cli/issues/2567#issuecomment-772085171,您可以使用默认 NPM 注册表的虚拟令牌来解决此问题。在我们的项目中.npmrc,添加以下行:

//registry.npmjs.org/:_authToken=dummy

完整的项目.npmrc应包含:

//registry.npmjs.org/:_authToken=dummy
@my-org:registry=https://npm.pkg.github.com/

在问题中,两个项目都没有.npmrc我们尝试使用的语法指定了一个注册表,因为 NPM 的文档表明我们不必这样做。该文档指出它将检查我们的全局~/.npmrc如果我们的项目中没有.npmrc。 NPM 中的错误导致 NPM 检查项目是否.npmrc在尝试进行身份验证之前已指定一个注册表。在幽灵加自己的话 https://github.com/npm/cli/issues/2567#issuecomment-772082206:

发生的情况是,当前 cli 仅在查看您是否已登录时查找您配置的“注册表”设置。因此临时解决方案是覆盖该设置(就像您通过传递 --registry 所做的那样),或者添加默认 (npm) 注册表的令牌,以便令牌检查不会失败。检查只是在配置中查找令牌的存在,而不是验证它(当然,如果在实际请求期间使用它,就会发生这种情况),因此放入一个虚拟值将停止错误,直到 PR土地。

添加虚拟令牌后,运行npm publish and npm install都应该成功。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

`npmpublish` 和 `npminstall` 失败取决于使用的 `.npmrc` 语法 的相关文章

随机推荐

  • 从平面文件向 SQL Server 插入数百万条记录有哪些陷阱?

    我即将开始编写一个 Windows 窗体应用程序 该应用程序将打开一个以竖线分隔且大小约为 230 mb 的 txt 文件 然后 该应用程序会将这些数据插入到 sql server 2005 数据库中 显然这需要快速发生 我在这个项目中使用
  • 在 iTunes Connect 中更改新应用程序版本号

    我相信我设法让自己在 iTunes Connect 中陷入某种奇怪的僵局 我有一个应用程序 当前版本为 2 14 写完更新后 我决定将新版本编号为2 2 iTunes Connect 允许我做到这一点 当我尝试验证新版本时 它告诉我在 iT
  • 难以理解捕获组和反向引用

    为了整理我对正则表达式的了解 我决定阅读一本关于它们的书 正则表达式简介 我知道这很愚蠢 但其中一个介绍性示例对我来说没有意义 d d 1 示例文本 123 456 7890 应该捕获第一个数字 123 谁能解释一下这里发生了什么 据我所知
  • 批量-通过输入更改帐户密码

    我想在启动时创建一个批处理文件 要求用户更改当前的管理员密码 Step 1 User logins Step 2 Batch file runs displaying message Please change Administrator
  • React - 身份验证过程:无法在调度过程中调度

    我已经开始通过flummox react bootstrap 和react router 来玩react 我正在尝试为我的网站创建一个基本的同构 CMS 语境 在身份验证方面 每个用户都有一个功能列表 每个组件都使用我的身份验证存储 可以
  • 如何在IOS中更新App文件(html)?

    我的应用程序非常简单 我有一些带有 html 文件名的 plist 当用户选择一行时 webview 会加载该 html 文件及其内容 我很好奇如何进行应用程序更新 例如 我有一个新的更新的 html 文件 并进行了更正 我希望用户通过单击
  • 如何在NTVS(Node Tools for Visual Studio)中使用nodemon

    我在 Visual Studio Professional 13 上使用 Node 很快意识到每次代码更改都需要重新启动服务器变得很麻烦 所以我做了一些研究 发现大多数人使用nodemon来自动刷新他们的服务器 尽管在线教程使用命令行使用n
  • 触摸屏摇杆算法

    我想在触摸屏上模拟模拟操纵杆 如下图所示 当摇杆区域中心设置为 cx cy 时 如何计算触摸位置 tx ty 的X方向比和Y方向比 1 0 1 0 x 方向的比率为 tx cx r 其中 r 是圆的半径大小 类似地 y方向比率为 ty cy
  • 使用服务帐户从python调用Google Cloud Function进行身份验证

    我有一个触发器类型设置为 HTTP 的云函数 并且还有一个有权调用云函数的服务帐户 我想从 python 脚本调用云函数 我使用以下脚本来调用该函数 from google oauth2 import service account fro
  • jQuery 验证复选框是否需要选中?

    我正在使用 jQuery 验证插件来验证表单 问题是我找不到一种方法来验证表单中的单个复选框是否被选中 HTML 标记
  • 从 csv 生成树结构

    我已经为这个问题摸不着头脑有一段时间了 我基本上试图从一组 CSV 数据生成树层次结构 CSV 数据不一定是有序的 这就像下面这样 Header Record1 Record2 Value1 Value2 Row A XX 22 33 Ro
  • 在 Heroku 上使用 MySQL 和 PHP

    如何将 MySQL 数据库上传到 Heroku 以与 PHP 应用程序一起使用 我在 Heroku 上找到的唯一文档是 将 ClearDB 与 PHP 结合使用 从 PHP 连接到 ClearDB 非常简单 只需要解析 CLEARDB DA
  • 如何增加全日历中两个事件之间的间距

    我想增加完整日历月视图中两个事件之间的空间 您需要修改事件的 css 元素事件渲染函数 http arshaw com fullcalendar docs event rendering eventRender 你可以像这样实现事件之间的间
  • 如何使用java / spring将图像存储到redis

    我在图像上传服务器上使用 redis 和 spring 框架 我需要将图像存储到redis 我发现了以下问题 但它是针对 python 的 如何使用 python PIL 将图像存储到 redis 中 https stackoverflow
  • 如何在asp.net中使用javascript设置下拉列表框的可见true和false

  • 无法读取 Android 调试密钥

    尝试构建我的应用程序 10 分钟前我可以毫无问题地构建该应用程序 但突然开始出现此错误 What went wrong Execution failed for task app packageDebug gt Failed to read
  • Android - 将用户发送到 Activity 的 GCM 推送通知不会导致 onCreate 调用

    我能够创建推送通知 并将用户发送到我想要的任何 Activity 但我注意到每当用户登陆该 Activity 时 onCreate 函数都不会被调用 应该是这样吗 如何设置才能调用Activity的onCreate 这是我的活动 publi
  • 私有方法 Jasmine 单元测试

    我正在使用 jasmine 为角度应用程序编写测试用例 但许多内部方法在服务中被声明为私有方法 Example App service productDisplay function var myPrivate function do st
  • CocoaPods 找不到 pod“Firebase/Everything”的兼容版本

    当我尝试在 iOS 中运行 React Native 应用程序时 出现此错误 CocoaPods could not find compatible versions for pod Firebase Auth In Podfile Fir
  • `npmpublish` 和 `npminstall` 失败取决于使用的 `.npmrc` 语法

    当前行为 我正在尝试配置项目以安装来自 NPM 的依赖项 我将把项目作为私有包发布到 GitHub Packages 如果我在我的项目中使用这个语法 npmrc my org registry https npm pkg github co