LoginSignup
2
0

More than 1 year has passed since last update.

sudoで実行したいnpmと開発で使いたいnpmを分ける

Posted at

考え方の話なので、rubyでも同様にできます。
ここでは書いてませんが、github_changelog_generatorと開発のrubyを分けてます。

やりたいこと

  • github-changesを実行するnpmはsudoを使う
  • 開発中のnpmのバージョンは最新にしたい
  • WSLで完結させる

結論

  • sudo su -でrootになってからnpmをインストール
    • /root/.nodenvなどにインストールしても良いし、拘らなければapt install npmでも良い
  • 別途nodenv等を使って入れたnpmにパスを通す
  • sudo which npmwhich npmの結果が異なっている

注意

コマンドに直接npmと掛ける場合は、which npmの結果がsudoとそうでない場合でパスを分ければよい、つまりrootで使えるnpmのフルパスと、ユーザーや環境ごとに使いたいnpmのフルパスを明示的に書いて分けるべきです。
なので、シンプルにnpm install パッケージとするなら$(sudo which npm) install$(which npm) installで書くべきです。1
今回の要件はgithub-changes内で使われているnpmを指定したいのと、開発で使っているnpmのバージョンを分ける必要があったので、運用中のsudo npm`専用のコンテナや開発のための専用コンテナなりを用意するのがベストですが、個人開発なのでわがままセットな環境を作りたかったのでこういうやり方をしてます。

前提

いつもどおり、WSLを使ってます。
開発で使うnodeと運用で使うnodeを分ける必要があったのですが、

  • 運用で使用するnodeにsudo権限が必要なパッケージがあった
  • 開発で使うためのnodeのバージョンは管理しておきたい

という要件を満たす必要があったので、これを解決する方法を探していました。

やり方

結論にも書いてます。nodenvをrootでインストールとuserでインストールの-2回分でやればいいです。
ただし、インストールする場所は当然変える必要があります。

nodenvはそれぞれの~/.nodenvに作成されるので、
ちょっと検証してみたんですが、anyenv自体のバージョンを分ける必要はないので/optに置いて検証したところ共通のanyenvでそれぞれのnodenvが作られるので、anyenvを分ける必要はなさそうです。2

コマンド例

思いついたらちょこちょこ直しているので、Githubを貼り付けておきます

注釈


  1. $(sudo which npm)$(which npm)】説明のために端折ってますが、正しくフルパスで書きます 

  2. 【anyenvを分ける必要はない】よく考えれば、linuxbrewを入れた時は/home/linuxbrewに作られ、ユーザー問わずlinuxbrew以下を参照するので、共通のanyenvを使っている事になりますね。 

2
0
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
0