NPM アカウントをディレクトリで分けたい
この記事はときは会アドベントカレンダー2023の2日目の記事です。
結論
npm login をすると ~/.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
を確認すると、認証トークンが追加されていることが分かります。
# 認証トークンが追加される
//registry.npmjs.org/:_authToken=npm_XXXXXXXXXXXXXXXXXXXX
...
解決の光
npm は .npmrc
の内容をからログイン情報を取得しています。そこで、どのディレクトリの下にいるかで、 .npmrc
の内容を自動的に切り替えできればよいことが分かります。また .npmrc
の内容は環境変数を参照することができます。以上を結びつけると、解決の光が見えてきます。
ディレクトリごとに環境変数を切り替えるためには direnv を使います。
brew install direnv
例えば、以下のように設定してみます。
export X_NPM_AUTH_TOKEN=npm_XXXXXXXXXXXXXXXXXXXX
//registry.npmjs.org/:_authToken=${X_NPM_AUTH_TOKEN}
これによって、 ~/work
以下の各プロジェクトでは自動で認証トークンが設定されます。
設定手順
例えば、仕事用のディレクトリである ~/work
以下での npm アカウントを設定するには、以下の手順を踏めば OK です。
- direnv をインストールする
-
npm login
コマンドを使って、仕事用アカウントでログインする -
~/work/.envrc
がなければ作る -
~/.npmrc
の認証用トークンを~/work/.envrc
に X_NPM_AUTH_TOKEN として export する -
~/.npmrc
の認証用トークンの値を${X_NPM_AUTH_TOKEN}
に変更する
以上です。
まとめ
この方法はあまり公式な手順ではないからか、あまり検索しても見つけることができませんでした。場合によっては CI 等でも活用できるのではないかなと思います。誰かのお役に立てば幸いです。
Discussion