📖

NPM アカウントをディレクトリで分けたい

2023/12/02に公開

この記事はときは会アドベントカレンダー2023の2日目の記事です。

結論

npm login をすると ~/.npmrc に認証トークンが生成されます。

~/.npmrc
# 認証トークン
//registry.npmjs.org/:_authToken=npm_XXXXXXXXXXXXXXXXXXXX
...

このトークンはどのディレクトリにも移動できるので、あとは煮るなり焼くなり。

やりたいこと

npm アカウントを複数持っており、仕事用と個人用で分けたい場面がありました。私は以下のような構成で、ディレクトリを使って仕事用と個人用を分けていて、Git の設定もディレクトリで切り替えていました。

~/work/
  - 仕事用リポジトリ1
  - 仕事用リポジトリ2
  - ...
~/private/
  - 個人用リポジトリ1
  - 個人用リポジトリ2
  - ...

npm アカウントも同じように管理できないかな~ ? と思って解決を探していたのですが、なかなかよい方法が見つからずに困っていました。

そもそも npm アカウントってどう確認するんだっけ

npm アカウントは、以下の方法で操作ができます。

  • npm login => ログイン
  • npm logout => ログアウト
  • npm whoami => どのアカウントでログインしているか表示

npm login の後、 ~/.nmprc を確認すると、認証トークンが追加されていることが分かります。

~/.npmrc
# 認証トークンが追加される
//registry.npmjs.org/:_authToken=npm_XXXXXXXXXXXXXXXXXXXX
...

解決の光

npm は .npmrc の内容をからログイン情報を取得しています。そこで、どのディレクトリの下にいるかで、 .npmrc の内容を自動的に切り替えできればよいことが分かります。また .npmrc の内容は環境変数を参照することができます。以上を結びつけると、解決の光が見えてきます。

ディレクトリごとに環境変数を切り替えるためには direnv を使います。

setup
brew install direnv

例えば、以下のように設定してみます。

~/work/.envrc
export X_NPM_AUTH_TOKEN=npm_XXXXXXXXXXXXXXXXXXXX
~/.npmrc
//registry.npmjs.org/:_authToken=${X_NPM_AUTH_TOKEN}

これによって、 ~/work 以下の各プロジェクトでは自動で認証トークンが設定されます。

設定手順

例えば、仕事用のディレクトリである ~/work 以下での npm アカウントを設定するには、以下の手順を踏めば OK です。

  1. direnv をインストールする
  2. npm login コマンドを使って、仕事用アカウントでログインする
  3. ~/work/.envrc がなければ作る
  4. ~/.npmrc の認証用トークンを ~/work/.envrc に X_NPM_AUTH_TOKEN として export する
  5. ~/.npmrc の認証用トークンの値を ${X_NPM_AUTH_TOKEN} に変更する

以上です。

まとめ

この方法はあまり公式な手順ではないからか、あまり検索しても見つけることができませんでした。場合によっては CI 等でも活用できるのではないかなと思います。誰かのお役に立てば幸いです。

GitHubで編集を提案

Discussion