🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
npm

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

解決済

1回答

3392閲覧

Node.js バージョン管理ツール nについて

raspypy

総合スコア247

npm

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2019/12/10 07:21

編集2019/12/10 08:02

#やろうとしていること

Node.jsバージョン管理ツール「n」をインストールしたのですが、
$ sudo n stable
コマンドを実行すると、sudo: n: コマンドが見つかりませんとなってしまいます。

「n」のインストール結果も掲載していますが、インストールはできていると思っています。
しかし、「コマンドが見つかりません。」という結果になってしまうので、原因が分からず困っています。

##今の環境
Raspberry Pi3
Raspbian: Buster
pi@raspberrypi:/ $ node -v
v10.15.2
pi@raspberrypi:
/ $ npm -v
5.8.0

npm config list

text

1; cli configs 2metrics-registry = "https://registry.npmjs.org/" 3scope = "" 4user-agent = "npm/5.8.0 node/v10.15.2 linux arm" 5 6; userconfig /home/pi/.npmrc 7https-proxy = "http://xxx/" 8prefix = "/home/pi/.npm_global" 9proxy = "http://xxx/" 10 11; builtin config undefined 12globalconfig = "/etc/npmrc" 13globalignorefile = "/etc/npmignore" 14 15; node bin location = /usr/bin/node 16; cwd = /home/pi/dev 17; HOME = /home/pi 18; "npm config ls -l" to show all defaults.

##nのインストール
pi@raspberrypi:~/dev $ npm install n -g

text

1/home/pi/.npm_global/bin/n -> /home/pi/.npm_global/lib/node_modules/n/bin/n 2+ n@6.1.3 3added 1 package from 4 contributors in 3.621s

##npm最新バージョンへのアップデート
pi@raspberrypi:~/dev $ npm install npm@latest -g
コマンドを実行し、version6.13.3にアップデートできていると思うのですが、
上記の通り、$npm -vを実行すると、5.80が返ってきてしまいます。

text

1/home/pi/.npm_global/bin/npm -> /home/pi/.npm_global/lib/node_modules/npm/bin/npm-cli.js 2/home/pi/.npm_global/bin/npx -> /home/pi/.npm_global/lib/node_modules/npm/bin/npx-cli.js 3+ npm@6.13.3 4added 430 packages from 854 contributors in 53.185s

##npm パッケージのバージョン確認結果
$ npm -vではなく、次の方法でバージョン確認した結果を掲載します。

text

1pi@raspberrypi:~/dev $ npm list -g --depth=0 2/home/pi/.npm_global/lib 3--- n@6.1.3 4--- npm@6.13.3 5 6pi@raspberrypi:~/dev $ npm list --depth=0 7/home/pi/dev 8--- (empty)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

raspypyさん、

まずは、sudoのおはなしから。
sudoは、rootユーザ・環境にて、コマンドが実行されます。

コマンドは、環境変数PATHに書かれているフォルダ(:が区切り)を先頭から順にたどって、見つかったものが実行されます。みつからないと、「コマンドが見つかりません。」ですね。

以下を実行してPATHの内容を表示してみると、違うのではないでしょうか。

echo $PATH sudo sh -c 'echo $PATH'

前者では、piユーザでの環境で、nコマンドへのフルパス(フォルダ)が含まれていて、後者にはないのではないかと思います。
nをインストールしたときに、使用ユーザ(pi?)の環境へのみインストールしたので、sudoでは「コマンドが見つかりません。」となっていると思います。

とりあえず、以下で、やり直してみてください。
/usr/local/binというデフォルトで含まれているところへインストールします。
(うまく動かないとき、いままで実行したのを戻すのができないのであれば、Raspbianの入れ直しからした方がよいと思います。)

# n をダウンロード curl -L https://raw.githubusercontent.com/tj/n/master/bin/n -o n # 実行属性を付ける chmod a+x ./n # /usr/local/bin へコピー。 sudo cp -v n /usr/local/bin # 以下、https://github.com/tj/n に書かれていることを実行(To avoid requiring sudo for n and npm global installs... のあたり) sudo mkdir -p /usr/local/n sudo chown -R $(whoami) /usr/local/n sudo chown -R $(whoami) /usr/local/bin /usr/local/lib /usr/local/include /usr/local/share # nodeのltsをインストール n lts

これで、node環境を試してみてください。

投稿2019/12/11 01:24

mt08

総合スコア1825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

raspypy

2019/12/11 03:54 編集

mt08さま 丁寧な回答ありがとうございます。 本当に助かります。 いただいた回答をもとに勉強させていただきました。 2点教えていただきことがあります。 度々申し訳ありませんが、回答いただけると助かります。 [確認結果] 教えていただいた方法で、nのインストールが成功し、nコマンドを実行できることが確認できました。 pi@raspberrypi:~/dev $ which n /usr/local/bin/n pi@raspberrypi:~/dev $ node -v v12.13.1 pi@raspberrypi:~/dev $ npm -v 6.12.1 [教えていただきたいこと] ①npmをインストールする際、 pi@raspberrypi:~/dev $ sudo npm install n -g とコマンドを入力して、インストールしました。 今回は、piユーザの環境にのみインストールしたことが原因だったと考えていますが、 上記コマンドでpiユーザの環境へインストールされるのでしょうか。 (私の認識では、root環境へのインストールと考えていました。) ※1つ気になることとして、 今回のインストールの途中で、 グローバルパスを変更するコマンドを、一度実行してしまいました。 $mkdir ~/.npm_global を実行してしまいました。これも原因なのでしょうか。 ②pi@raspberrypi:~/dev $ sudo n stableを実行したところ、次のエラーで実行できません。 こちらに関しては、lts(長期サポート版)をインストールしたので、必要ないとは思っていますが、 なぜ、sudo n stableが実行できないのか、分からず質問させていただきました。 curl: (7) Failed to connect to nodejs.org port 443: ホストへの経路がありません Error: failed to download version index (https://nodejs.org/dist/index.tab) ③同様にfirebase-toolsをインストールしたのですが、 pi@raspberrypi:~/dev $ which firebase /home/pi/.npm_global/bin/firebase firebaseも、npmと同じような状況で、piユーザ環境にのみ?インストールされてしまっています。 こちらを、root環境に戻す方法について、ご教授いただけると助かります。
mt08

2019/12/11 05:11

raspypyさん、 > 上記コマンドでpiユーザの環境へインストールされるのでしょうか。 `/usr/local/bin/`へのアクセスは、通常、誰でもPATHが通っている環境になるので、rootなのかpiユーザ環境なのか、というより、みんなが使える場所に置いた、と思っておくとよいかと。 > ②pi@raspberrypi:~/dev $ sudo n stableを実行したところ、次のエラーで実行できません。 > 'To avoid requiring sudo for n and npm global installs,~~ 'あたりのところを見ると、 (グーグル翻訳)nおよびnpmのグローバルインストールでsudoを必要としないようにするには、N_PREFIXを使用してホームディレクトリにインストールするか、システムディレクトリの所有権を取得することをお勧めします。 なので、`chown`で所有権を変更したあとは、とりあえず、`sudo`はつけずに使用するのがよいかと思います。 > curl: (7) Failed to connect to nodejs.org port 443: ホストへの経路がありません > Error: failed to download version index (https://nodejs.org/dist/index.tab) は、https://nodejs.org/dist/index.tab へアクセスできないので、エラーが出てるようです。 インターネットの接続を確認してください。
raspypy

2019/12/11 05:42

mt08さま 丁寧な回答ありがとうございます。 本当に度々申し訳ありませんが、3点お教えください。 ①$ sudo npm install n -g とインストールすると、piユーザ環境下にインストールされてしまうのは、次の理解で正しいでしょうか。 > -g とグローバルインストールをしていることと、 >$mkdir ~/.npm_globalで、グローバルパスを指定したから。 ②-g を付けなければ、`/usr/local/bin/`へインストールされるのでしょうか。 ③同様にfirebase-toolsをインストールしたのですが、 pi@raspberrypi:~/dev $ which firebase /home/pi/.npm_global/bin/firebase firebaseも、npmと同じような状況で、piユーザ環境にのみ?インストールされてしまっています。 こちらもroot環境下にインストールし直そうと考えているのですが、 まず、/.npm_globalフォルダをすべて削除し、 $ npm install firebase-tools -gなしコマンドでインストールすればよいと考えているのですが、間違えていますでしょうか。
mt08

2019/12/11 06:26

raspypyさん、 "`-g`"は、global = 全体的 ということで、みんなで使えるような場所に置く、オプションなので、つけてください。 -gをつけないと、現在のいるフォルダの`node_modules`というフォルダ(存在しなければ作成)にインストールされると思います。 なので、 > -gなしコマンドでインストールすればよいと考えているのですが、間違えていますでしょうか。 は間違いです。 どういった手順で、そんな環境になってしまったか、わかりませんが、今回は、globalとしてnpmが保存する場所が、`/home/pi/.npm_global/` と、どこかで設定されてしまったんではないでしょうか。 ところで、環境を元に戻せないようなら、OSの再インストールからするのがよいかと。。 SDカードは、読み書きが速い(40MB~/secくらい)のを、複数枚持っておくと、いいですよ。
raspypy

2019/12/11 06:35

度々申し訳ありません。 .npm_globalフォルダを削除したところ、 pi@raspberrypi:~ $ echo $PATH /home/pi/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games と、piユーザ環境から、/home/pi/.npm_global/が削除されました。 pi@raspberrypi:~ $ sudo sh -c 'echo $PATH' /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin とは、完全に一致しないのですが、 echo $PATH sudo sh -c 'echo $PATH' この2つのコマンドの実行結果は、一致しなければならないのでしょうか?
mt08

2019/12/11 07:07

raspypyさん、 一致しなくて大丈夫です。 `root`ユーザの環境変数PATHと、`pi`ユーザの環境変数`PATH`なので、それぞれのユーザの環境に依存します。
raspypy

2019/12/11 07:17

ありがとうございます。 本質問に関しては、無事解決することができました。とても助かります。 別質問で挙げているのですが、firebase-toolsをインストールすると、同じ問題となってしまいます。 こちらも見ていただけると助かります。 .npm_globalフォルダを削除してから、firebase-toolsをインストールしても、.npm_globalフォルダにインストールされてしまい、which firebaseとしても、何も表示されない。 ↓実行結果です。 pi@raspberrypi:~ $ npm install -g firebase-tools npm WARN registry Unexpected warning for https://registry.npmjs.org/: Miscellaneous Warning UNABLE_TO_VERIFY_LEAF_SIGNATURE: request to https://registry.npmjs.org/firebase-tools failed, reason: unable to verify the first certificate npm WARN registry Using stale data from https://registry.npmjs.org/ due to a request error during revalidation. /home/pi/.npm_global/bin/firebase -> /home/pi/.npm_global/lib/node_modules/firebase-tools/lib/bin/firebase.js > protobufjs@6.8.8 postinstall /home/pi/.npm_global/lib/node_modules/firebase-tools/node_modules/protobufjs > node scripts/postinstall npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@2.1.2 (node_modules/firebase-tools/node_modules/fsevents): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.1.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"arm"}) + firebase-tools@7.9.0 added 513 packages from 323 contributors in 83.631s pi@raspberrypi:~ $ which firebase (何も返ってこない)
mt08

2019/12/11 07:22

Raspbian Busterを焼いてるので、見てみます。 とりあえず、ここは、解決済みにしたほうがいいかもしれないですね。 なので、ここでなくて、そっちの質問の方へ回答します。
raspypy

2019/12/11 07:30

本当に、色々とご迷惑をおかけして、申し訳ありません。 情報がありましたら、別質問の方に挙げさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問