Установка частного пакета из реестра пакетов Github с помощью Yarn не выполняется без авторизации.

Этот вопрос связан с этим. Но ни одно из решений у меня не сработало.

Я могу без проблем установить пакет с npm install @scope/package, но я не могу сделать то же самое с yarn: yarn add @scope/package

yarn выдает следующую ошибку: An unexpected error occurred: "https://npm.pkg.github.com/download/@scope/package/1.2.8/089b08cffb16074c210ec3a59b04de268ae1c7b3a0492dce110adee3ada05bdd: Request failed \"401 Unauthorized\"".

мой файл .npmrc выглядит так: (пробовал с .yarnrc и без него)

registry=https://registry.npmjs.org/
//npm.pkg.github.com/:_authToken=MY_AUTHTOKEN
@scope:registry=https://npm.pkg.github.com/

Я пробовал добавить этот файл .yarnrc:

registry "https://registry.npmjs.org"
"@scope:registry" "https://npm.pkg.github.com"

(без .yarnrc) Я пробовал этот файл .npmrc

registry=https://registry.yarnpkg.com/

@scope:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=MY_AUTHTOKEN
always-auth=true

Где MY_AUTHTOKEN - это мой Personal Access Token, созданный мной на Github. (имеет доступ ко всему в пакетах)

Я пытался:

  • удалить yarn.lock
  • удалить .yarnrc
  • войти в систему с npm login, используя мой PAT в качестве пароля
  • выйти из npm и удалить глобальные .npmrc и .yarnrc
  • вход в систему с yarn login

В случае какой-либо путаницы я на самом деле пробую не @scope и / package, а мою фактическую область видимости и имя пакета.

У меня есть доступ к объему и пакету на Github.

и снова моя первая установка отлично работает с npm. Но я не могу заставить это работать с пряжей и не могу найти какое-либо действительное существующее решение на SO.


person MLyck    schedule 11.05.2020    source источник


Ответы (3)


Следующее работало для меня в .npmrc

@mvce-superstars:registry=https://npm.pkg.github.com

Используя yarn v2, в .yarnrc.yml у меня работало следующее:

npmScopes:
  "mvce-superstars":
    npmAlwaysAuth: true
    npmRegistryServer: "https://npm.pkg.github.com"

Во-первых, обратите внимание на имя области в нижнем регистре. Предполагается, что это имя владельца репозитория (MVCE-Superstars), в котором был опубликован пакет, но имя должно быть в нижнем регистре.


Установка

Издательский

  • Я создал частную копию этого репозитория hello-world.
  • Я скопировал вышеупомянутый файл .npmrc OR .yarnrc.yml в хранилище.
  • Затем я вошел в систему с помощью команды npm login --registry=https://npm.pkg.github.com/ OR yarn npm login --scope=mvce-superstars.
  • Я ввел свое имя пользователя github и свой токен (с областями действия read:package, write:package и repo)
  • Наконец, я отправил пакет в свое частное репо, используя npm publish ИЛИ yarn npm publish

Выход

npm notice 
npm notice ????  @mvce-superstars/[email protected]
npm notice === Tarball Contents === 
npm notice 16.3kB example.gif   
npm notice 89B    bin.js        
npm notice 175B   lib/index.js  
npm notice 734B   package.json  
npm notice 2.0kB  yarn-error.log
npm notice 570B   Readme.md     
npm notice 167B   init.sh       
npm notice === Tarball Details === 
npm notice name:          @mvce-superstars/hello-world-npm        
npm notice version:       1.1.1                                   
npm notice package size:  14.3 kB                                 
npm notice unpacked size: 20.0 kB                                 
npm notice shasum:        5379c8030fa9c5f57e5baef67f2a8a784ce93361
npm notice integrity:     sha512-FAI/Wuy4gHW8C[...]FINQeIlZ+HDdg==
npm notice total files:   7                                       
npm notice 
+ @mvce-superstars/[email protected]

Скачивание

  • Я создаю новый проект npm, используя npm init (use-hello-world-npm)
  • Копирую указанное выше .npmrc в корень папки
  • Затем я выхожу из npm (npm logout --registry=https://npm.pkg.github.com/) и снова вхожу (npm login --registry=https://npm.pkg.github.com/), на всякий случай.
  • Наконец, я запустил yarn и, как и предполагалось, все заработало!

Выход

yarn install v1.22.4
info No lockfile found.
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
success Saved lockfile.
Done in 0.55s.

пряжа v2

➤ YN0000: ┌ Resolution step
➤ YN0014: │ @mvce-superstars/hello-world-npm@npm:^1.1.1: Only some patterns can be imported from legacy lockfiles (not "https://npm.pkg.github.com/download/@mvce-superstars/hello-world-npm/1.1.1/426126f89734c2c76bfac0342c1de9c95ad003b6e905a7b9f9f745892c86da7a#5379c8030fa9c5f57e5baef67f2a8a784ce93361")
➤ YN0000: └ Completed in 0.55s
➤ YN0000: ┌ Fetch step
➤ YN0013: │ @mvce-superstars/hello-world-npm@npm:1.1.1::__archiveUrl=https%3A%2F%2Fnpm.pkg.github.com%2Fdownload%2F%40mvce-superstars%2Fhello-world-npm%2F1.1.1%2F426126f89734c2c76bfac0342c1de9c95ad003b6e905a7b9f9f745892c86da7a can't be found in the cache and will be fetched from the remote server
➤ YN0000: └ Completed in 1.3s
➤ YN0000: ┌ Link step
➤ YN0031: │ One or more node_modules have been detected and will be removed. This operation may take some time.
➤ YN0000: └ Completed
➤ YN0000: Done with warnings in 1.87s

Содержимое папки после yarn

.
├── node_modules
│   └── @mvce-superstars
├── package.json
└── yarn.lock

И на всякий случай удаляю (yarn remove @mvce-superstars/hello-world-npm):

yarn remove v1.22.4
[1/2] Removing module @mvce-superstars/hello-world-npm...
[2/2] Regenerating lockfile and installing missing dependencies...
success Uninstalled packages.
Done in 0.06s.

и снова добавляем (yarn add @mvce-superstars/hello-world-npm):

yarn add v1.22.4
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
success Saved lockfile.
success Saved 1 new dependency.
info Direct dependencies
└─ @mvce-superstars/[email protected]
info All dependencies
└─ @mvce-superstars/[email protected]
Done in 1.08s.

Репозиторий находится здесь, [он частный], поэтому, если вы хотите убедиться, что это работает именно так, как я объяснил, прокомментируйте ниже со своим именем пользователя на github, и я пришлю вам приглашение.

Источники:

person smac89    schedule 27.05.2020
comment
@MLyck в примере, который я показал, пытается воспроизвести вашу проблему, используя предоставленную вами информацию. Он использует частный репозиторий, как вы сказали, я также использовал PAT, как и вы, и я использую пряжу. Если у меня это сработало, значит проблема не в пряже, а в чем-то другом в вашей настройке. Возможно, вам нужно включить в свой вопрос дополнительную информацию о вашей настройке. - person smac89; 28.05.2020
comment
возможно, хотя я в этом очень сомневаюсь. Я смог решить эту проблему с помощью Yarn2 и довольно легко использовал новый файл yarnrc.yml (без каких-либо других изменений), предполагая, что это проблема Yarn. Тем не менее, ваш ответ абсолютно фантастический и, вероятно, будет полезен другим, вы явно приложили усилия для этого и протестировали его, поэтому вы определенно заслуживаете принятого ответа на этот вопрос. Но если это не сработает и для кого-то другого. Попробуйте перейти на Yarn 2 :) - person MLyck; 28.05.2020
comment
@MLyck Отлично. Я обновил свой ответ результатами использования пряжи v2. - person smac89; 28.05.2020

Вам нужно только использовать .npmrc в корне вашего проекта с таким содержанием:

//npm.pkg.github.com/:_authToken=GITHUB_PERSONAL_TOKEN
@OWNER:registry=https://npm.pkg.github.com

Имейте в виду, что GITHUB_PERSONAL_TOKEN необходимы разрешения области read: packages, чтобы читать пакеты из вашего частного репо.

person Alexander Dimitrov    schedule 26.05.2020
comment
Пряжа не читает .npmrc. Ищет .yarnrc.yml. - person ffxsam; 22.01.2021

Я добавляю здесь ответ, потому что после дня пробования различных вариантов решений здесь и в других местах я обнаружил, что моя проблема была в другом.

Моя проблема заключалась в том, что, хотя npm не чувствителен к регистру в отношении имен пакетов, yarn когда дело доходит до аутентификации! ????‍♂️

Итак, используя пример из этого решения:

registry=https://registry.yarnpkg.com/

@GITHUB_USERNAME:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=AUTH_TOKEN
always-auth=true

Мне нужно было убедиться в двух вещах:

  1. @GITHUB_USERNAME необходимо в соответствии с регистром, который вы видите на github, и именем, под которым был опубликован пакет. То есть, если ваше имя пользователя - Пикл-Рик, вам нужно указать @Pickle-Rick:registry=https://npm.pkg.github.com, а не @pickle-rick или @Pickle-rick.

  2. Вам необходимо сопоставить этот регистр в вашей package.json или yarn add команде - в зависимости от того, что вы используете. Например:

    "@Pickle-Rick/schwifty": "^1.0.0" in package.json or yarn add @Pickle-Rick/schwifty.

Я нашел это решение, покопавшись в yarn проблемах с github.

person elethan    schedule 18.11.2020