gpt4 book ai didi

node.js - `npm publish` 和 `npm install` 失败取决于使用的 `.npmrc` 语法

转载 作者:行者123 更新时间:2023-12-03 12:13:17 25 4
gpt4 key购买 nike

当前行为:
我正在尝试配置一个项目以从 NPM 安装依赖项。我将把项目作为私有(private)包发布到 GitHub Packages。如果我在项目的 .npmrc 中使用此语法:

@my-org:registry=https://npm.pkg.github.com/
我可以使用 npm install 从 NPM 安装依赖项在我的本地机器上。但是,我无法使用 npm publish 发布到 GitHub 包。 . NPM 通知我我没有通过身份验证。如果我在项目的 .npmrc 中使用此语法:
registry=https://npm.pkg.github.com/my-org/
我可以使用 npm publish 发布,但我无法使用 npm install 安装依赖项. NPM 通知我它正在尝试从 GitHub Packages 安装依赖项,而不是 NPM。
预期行为:
根据我的阅读,这两种语法都应该与 npm install 兼容。和 npm publish .但是,根据我的预期用途,我似乎只能使用其中一种。
重现步骤:
  • 安装 Node v15.7.0和 NPM 7.4.3通过nvm .
  • 使用以下命令登录 GitHub Packages:
    npm login --scope=@my-org --registry=https://npm.pkg.github.com
  • 查看我们的 ~/.npmrc文件在我们的主文件夹中。它应该是:
    @my-org:registry=https://npm.pkg.github.com/
    //npm.pkg.github.com/:_authToken=<auth-token-used-for-login>
  • 使用以下 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"
    }
    }
  • 添加以下 .npmrc到我们的项目:
    @my-org:registry=https://npm.pkg.github.com/
  • 运行npm install .安装应该成功。
  • 运行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
  • 更改项目.npmrc到:
    registry=https://npm.pkg.github.com/my-org/
  • 运行npm publish .发布应该成功。
  • rm -rf node_modules/ package-lock.json在项目中。
  • 运行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

  • 环境:
  • 操作系统:
  • MacOS Catalina 10.15.7
  • MacOS 大苏尔 11.1

  • Node :15.7.0
  • npm: 7.4.3

  • 我尝试过的事情
    使用 publishConfig不幸的是, publishConfig不能解决问题。它也没有解决这两个 .npmrc语法产生不同的结果。
    项目 .npmrc authTokenNPM 的文档指出不需要包含 authToken在项目中 .npmrc .使用 npm login 进行身份验证并存储 authToken在全局 ~/.npmrc应该足够了。
    解决方法
    使用 --registry命令行标志
    在解决影响此问题的 NPM 错误之前,我找到了一种解决方法。使用以下项目时 .npmrc句法:
    @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 Pull Request #2602 修复该错误。 .在此错误修复发布之前,最好的建议是执行下面列出的解决方法之一。
    解决方法 1:--registry命令行标志
    运行时npm publish , 添加 --registry旗帜。此标志使开发人员能够指定他们打算发布到的注册表,覆盖 .npmrcpackage.json配置。对于我的问题中列出的示例,项目 .npmrc应包含:

    @my-org:registry=https://npm.pkg.github.com/
    通过运行启动发布将成功:
    npm publish --registry=https://npm.pkg.github.com/
    解决方法 2:默认注册表的虚拟 token
    根据 npm developer wraithgar's comment on this bug's GitHub issue ,您可以使用默认 NPM 注册表的虚拟 token 来解决此问题。在我们项目的 .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在尝试进行身份验证之前已指定注册表。在 wraithgar's own words :

    What happens is that currently the cli is only looking for your configured "registry" setting when seeing if you have logged in. So the temporary solution is either to override that setting (as you were doing by passing --registry), OR to add a token for the default (npm) registry so that the check for a token does not fail. The check is only looking for the presence of a token in the config, it's not validating it (that of course will happen when and if it is used during an actual request), so putting a dummy value in will stop the error until that PR lands.


    添加虚拟 token 后,运行 npm publishnpm install都应该成功。

    关于node.js - `npm publish` 和 `npm install` 失败取决于使用的 `.npmrc` 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65945592/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com