質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.46%
Node.js

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

Q&A

解決済

3回答

5264閲覧

インストールしたのにcommand not found

cunwe

総合スコア65

Node.js

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

0グッド

0クリップ

投稿2021/11/23 05:00

編集2021/11/23 10:21

環境

MacOS Big Sur

質問

こちらの記事によると
$npm install -g npm-check-updatesするとncuコマンドが使えるようになるそうなのですが、その後$ncuとやってもcommand not foundと表示されてしまい、$which -a rbenv(僕の場合はここはncu)で実行ファイルがあるか確認するという記事の通りやってもncu not foundと出てきてしまって実行ファイルがなさそうなのです。一番最初のコマンドで実行ファイルがインストールされていない、もしくはされてるけど正しく認識できてない原因はなんだと考えられますでしょうか?また対処法を教えてくださいますと幸甚です。よろしくお願いいたします。

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

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

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

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

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

itagagaki

2021/11/23 05:45

> nuc not found ncuではなく?
cunwe

2021/11/23 07:06

すいません、ncuの間違いでした(編集しました)
guest

回答3

0

ベストアンサー

npm-check-updatesのpackage.jsonのbinキーを見てみましょうか

json

1 "bin": { 2 "npm-check-updates": "build/src/bin/cli.js", 3 "ncu": "build/src/bin/cli.js" 4 },

これを指定してあるモジュールをnpm install -gオプション付きでインストールした場合、
コマンドとして追加されるはずです。

実際の該当箇所を見ると
ncunpm-check-updatesのコマンド登録の記述が確認出来ます。

けれど実際にはコマンド登録出来ていない。


ってことは環境変数のPATHが問題かな?

少しコマンドラインに於けるコマンドとは何か?を解説します。

コマンドラインで何かしらのコマンドを実行した場合、
環境変数のPATHに記述されているディレクトリ(フォルダ)を左から順番に1つずつ覗いていき、
同じ名称の実行ファイルが存在している場合
「コマンドが存在する」という挙動になります。

npmがコマンドを使えるようにするという流れとして、
この環境変数PATHで指定されているディレクトリの何処かに実行ファイルをポコンと吐き出して、
「ここに実行ファイルがあるからコマンドとして使えるはずだよ」という事をやっているわけです。

なので、本当にこの流れが正しいのか?を確かめなくてはなりません。

  • 環境変数PATHを確認
  • npmが実行ファイルを吐き出す先のパスを確認

まずは環境変数のPATHを確認してみましょう。

MacやLinuxならecho $PATHで確認できます。
whichコマンドが使えているみたいなのでMacなんですかね?
もしWindowsならecho %path%とか、コマンドプロンプトやPowerShell等で確認方法が異なるので検索して調べてみてください。
これを一度メモなどに書き出して保存しておいてくださいね。

次にnpmの実行ファイル吐き出し先を確認しましょう。

bash

1$ npm bin -g

この辺の整合性が狂っているので実行ファイルが作られているにも関わらず
使えないという状況になると推測されます。


解決方法は色々あります。
しかし、質問者さんがそもそもどうやってNode.jsとnpmを導入したかにより
取るべき手段が異なるので、そのへん考えてみてください。

  • 公式サイトのNode.js

インストール時に環境変数の書き換えなんかも頑張ってやってくれているはず。
多分インストールに失敗しているのでアンインストールして入れ直してみてください

環境変数PATHの指定は自分でやってくださいという思想です
インストール時に下記をやってくださいという英語の指示が出てるはずですが、やってませんね?

環境変数周りもバッチリなので今回のような問題は起こるはずがありません
既存のNode.jsなんて捨ててこちらに乗り換えてはいかが?

  • その他

知らん。環境変数PATHの指定をすればとりあえず動くとは思います。

投稿2021/11/23 09:51

miyabi-sun

総合スコア21158

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

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

cunwe

2021/11/23 10:26 編集

ご回答くださりありがとうございます。 環境を書き損じておりました、失礼しました。はい、Macでございます。 パスは先程`export PATH=$PATH:/Users/foo/.npm-global/bin >> ~/.zshrc`で追記しました。また、`$npm bin -g`を実行すると`/Users/foo/.npm-global/bin`と表示されるので整合性は取れてるように思うのですが、他に何か確認すべきコマンドなどございますでしょうか?
cunwe

2021/11/23 10:32

また`$ nodebrew list`を実行すると ``` v15.10.0 v16.13.0 current: v15.10.0 ``` と表示されて、`$nodebrew use v16.13.0`として`$node --version`で確認するとv12.18.4と表示されてしまうのですが、これはどういった原因が考えられますでしょうか...?
miyabi-sun

2021/11/23 10:59

> パスは先程`export PATH=$PATH:/Users/foo/.npm-global/bin >> ~/.zshrc`で追記しました。 先程?ってことは、ターミナルを再度立ち上げ直しで正常動作するようになるのでは? この.zshrcはターミナル起動時に1度実行されるものなので、 ファイルに追記しただけでは動きません。 まぁ、`bash`コマンドから`zsh`コマンドで入り直しても適用されると思います。 そのへんをまず試してみてください。
miyabi-sun

2021/11/23 11:01

コメントの後者の方は結構大問題です。 推測ですが公式サイトのインストーラーでNode.jsを入れたとか、 HomebrewでNode.jsを入れたとかではないでしょうか? そちらの方のv12系のNode.jsをまずアンインストールしましょう。
cunwe

2021/11/23 11:45

失礼しました、先程というのはtechnocore様に「.npm-global/bin/ 配下にncuがあるか確認してみてください。もしあればPATHに追加してください。」と教えていただきその時にパスを通して`$ source ~/.zshrc`まで実行したということ意味でした。
cunwe

2021/11/23 13:20

>公式サイトのインストーラーでNode.jsを入れたとか、 HomebrewでNode.jsを入れたとかではないでしょうか? はい、それのどちらかだったかと思います。
miyabi-sun

2021/11/23 13:22

なるほど、 そしてこの`export PATH=$PATH:/Users/foo/.npm-global/bin >> ~/.zshrc`は そもそもnodebrewの指定方法ではありません。 nodebrewは`/Users/foo/.nodebrew`みたいなフォルダを作って、その中で全て完結させるという設計です。 また`export PATH="$PATH:/Users/foo/.npm-global/bin" >> ~/.zshrc`のように ちゃんとダブルクォートで括らないと危ないんじゃね?とか ファイルに保管される前にPATHの展開機能が発火しませんか?とかあるので ちゃんとエディタで.zshrcファイルを開いて確認、編集しましょう。
cunwe

2021/11/24 08:41 編集

色々混乱させてしまい申し訳ありません。 >この`export PATH=$PATH:/Users/foo/.npm-global/bin >> ~/.zshrc`は そもそもnodebrewの指定方法ではありません。 勘違いしておりました、これはnpmの指定方法ですかね? またnodebrewを使った場合で考えると、システム内を探してみましたところ/Users/foo/.nodebrewというフォルダがあったのですが、v12.18.4を削除したい場合はどのような操作をすればよろしいでしょうか?
cunwe

2021/11/24 08:39

~/.zshrcにexport PATH=$HOME/.nodebrew/current/bin:$PATHを記載後、source ~/.zshrcをして再びnode -vするとv16.13.0と表示されました。
guest

0

もしかして;
$ncu じゃなくて、ncu と打ってみてください

投稿2021/11/23 06:57

y_waiwai

総合スコア87800

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

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

cunwe

2021/11/23 07:08

コマンドであることをわかりやすくするために`$`をつけてしまいましたが、実際にはncuと打ちました。
y_waiwai

2021/11/23 07:11

なら、そのncuコマンドがどこにあるか探してみよう。 インストールしてあるなら、そこにPATHが通っていないだけかと
cunwe

2021/11/23 07:16

https://qiita.com/iwaseasahi/items/6e00883ccd0864ede17e#%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%A4%9C%E7%B4%A2 質問文の方にも載せましたが、こちらの記事によると$ which -a ncuでncu not foundと表示されるとそもそも実行ファイルがないということになるそうなのですが、$npm install -g npm-check-updatesしたのになぜ実行ファイルがないということがありえるのでしょうか...?
y_waiwai

2021/11/23 07:20

whichコマンドというのは、PATHをたぐっていってそのコマンドを探すってもんなので、PATHがとおっていなければ探せません
cunwe

2021/11/23 07:41

そうなのですね、失礼いたしました。パスを通してncuコマンドが使えるようになりました、ありがとうございます。
guest

0

>$which -a rbenv(僕の場合はここはncu)
rbenvはrubyの切り替えツールですよ。

$ npm install -g npm-check-updates

$ npm list -g
/Users/foo/.nodenv/versions/16.13.0/lib
├── @vue/cli@4.5.15
├── corepack@0.10.0
├── express-generator@4.16.1
├── npm-check-updates@12.0.2
└── npm@8.1.0

$ type -a ncu
ncu is /Users/foo/.nodenv/shims/ncu

$ ncu -Versions
12.0.2

投稿2021/11/23 06:07

編集2021/11/23 06:09
technocore

総合スコア7247

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

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

cunwe

2021/11/23 07:13

ご回答くださりありがとうございます。 >rbenvはrubyの切り替えツールですよ。 はい、なので僕は$which -a ncuと打ちました $ npm list -gを実行すると/Users/foo/.npm-global/lib配下にだーっとパッケージ(?)が表示されましたがtechnocore様の/Users/foo/.nodenv/versions/16.13.0/libと違うのでどこかおかしいでしょうか...? また、$ type -a ncuを実行するとncu not foundと表示されます。。
technocore

2021/11/23 07:24

.npm-global/bin/ 配下にncuがあるか確認してみてください。 もしあればPATHに追加してください。
cunwe

2021/11/23 07:47

ご回答くださりありがとうございます。 json ncu npm-check-updates n npm npx の6つがありましたが、ncuとnpm-check-updatesは別物なのですかね...? またnucのパスは追加することができました、ありがとうございます! そこで質問文に載せました記事の通り$ncuを実行すると ``` No package.json Please add a package.json to the current directory, specify the --packageFile or --packageData options, or pipe a package.json to stdin. ``` と表示されてしまったのですが、package.jsonというの使うモジュールのバージョンなどを記載するものでプロジェクトごとに生成するものではないでしょうか...?また記事ではapp配下に生成してますが、僕の場合bin配下に生成することになってしまうのですが問題ないでしょうか?
technocore

2021/11/23 08:12

>ncuとnpm-check-updatesは別物なのですかね...? ヘルプを見ればわかります。 ncu --help npm-check-updates --help >プロジェクトごとに生成するものではないでしょうか...? それで合っています。
cunwe

2021/11/23 09:18

1つ目に関しましてはヘルプを見ることで解決しました、ありがとうございます。 2つ目に関してなのですが、質問文に添付した記事によりますと$ncuを実行すると利用可能な最新バージョンを調べて教えてくれるはずなのですが、package.jsonがないよと怒られてしまうのは何故でしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問