2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Azure DevOpsで作ったnpmリポジトリからyarn installできなかった問題

Posted at

前置き

プロジェクトでAzure Artifacts(gradle、npmなどのパッケージのリポジトリ)を使うことになり、yarn installでnpmパッケージをインストールしようとした際、公式の方法ではうまく動作しなかったので、その解決方法について、記述します。

Azure公式の方法

公式の方法によると、.npmrcへ以下内容を記述したうえで、パッケージをインストールすればよいことになっています。
次の二つの項目は、自動生成された設定に実際の内容が記述されます。

  • [Organazation Name] Azureで作成した組織名
  • [User Name] Azureのユーザー名
.npmrc
registry=https://pkgs.dev.azure.com/[Organazation Name]/_packaging/internal%40Local/npm/registry/
always-auth=true

; begin auth token
//pkgs.dev.azure.com/[Organazation Name]/_packaging/internal%40Local/npm/registry/:username=[Organazation Name]
//pkgs.dev.azure.com/[Organazation Name]/_packaging/internal%40Local/npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//pkgs.dev.azure.com/[Organazation Name]/_packaging/internal%40Local/npm/registry/:email=npm requires email to be set but doesn't use the value
//pkgs.dev.azure.com/[Organazation Name]/_packaging/internal%40Local/npm/:username=[User name]
//pkgs.dev.azure.com/[Organazation Name]/_packaging/internal%40Local/npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//pkgs.dev.azure.com/[Organazation Name]/_packaging/internal%40Local/npm/:email=npm requires email to be set but doesn't use the value
; end auth token

しかし、上記の方法ではnpm installは行えますが、yarn installすることができません。
yarn install時に出力されるエラーログは次のようになります。

$ yarn install
yarn-error.log
Trace:
  Error: https://pkgs.dev.azure.com/[Organazation Name]/_packaging/internal@Local/npm/registry/@[Organazation Name]/[Package]/-/[Package]-0.0.1.tgz: Request failed "401 Unauthorized"
      at ResponseError.ExtendableBuiltin (/opt/yarn-v1.22.4/lib/cli.js:696:66)
      at new ResponseError (/opt/yarn-v1.22.4/lib/cli.js:802:124)
      at Request.<anonymous> (/opt/yarn-v1.22.4/lib/cli.js:67057:16)
      at Request.emit (events.js:314:20)
      at Request.module.exports.Request.onRequestResponse (/opt/yarn-v1.22.4/lib/cli.js:141625:10)
      at ClientRequest.emit (events.js:314:20)
      at HTTPParser.parserOnIncomingClient (_http_client.js:640:27)
      at HTTPParser.parserOnHeadersComplete (_http_common.js:119:17)
      at TLSSocket.socketOnData (_http_client.js:509:22)
      at TLSSocket.emit (events.js:314:20)

原因

  1. .npmrc内でリポジトリと認証方式のスコープを指定していなかった。
  2. Azure公式の方法では、@を%40とURLエンコードしているが、これをyarnがデコードしていなかった。

解決方法

.npmrcを以下の点を修正して、yarn installを行う。1

  1. スコープを指定する。
  2. %40となっている箇所を@に変える。
修正後の.npmrc
@[Organaization Name]:registry=https://pkgs.dev.azure.com/[Organazation Name]/_packaging/internal@Local/npm/registry/ # スコープ(@[Organization Name])を付ける。%40となっている箇所を@へ変更、以下も同様にする。
@[Organaization Name]:always-auth=true # スコープ(@[Organization Name]を付ける)

; begin auth token
//pkgs.dev.azure.com/[Organazation Name]/_packaging/internal@Local/npm/registry/:username=[Organazation Name] #
//pkgs.dev.azure.com/[Organazation Name]/_packaging/internal@Local/npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//pkgs.dev.azure.com/[Organazation Name]/_packaging/internal@Local/npm/registry/:email=npm requires email to be set but doesn't use the value
//pkgs.dev.azure.com/[Organazation Name]/_packaging/internal@Local/npm/:username=[User name]
//pkgs.dev.azure.com/[Organazation Name]/_packaging/internal@Local/npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//pkgs.dev.azure.com/[Organazation Name]/_packaging/internal@Local/npm/:email=npm requires email to be set but doesn't use the value
; end auth token
  1. 修正後の.npmrcであってもnpm installは行えます。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?