LoginSignup
0
0

More than 1 year has passed since last update.

npmコマンドが何も出力せずに終了する問題を解決した話

Posted at

Macbook Air M2をセットアップ中の出来事になります。備忘録としてメモを残しておきます。

結論

  • .npmがシンボリックリンクだった
  • 移行アシスタントはシンボリックリンクは解決してくれない(そのまま移行する)ので注意

現象

npm i を実行すると、何も出力せずに終わる。

% npm i yarn -g

%

npmはある(ホームディレクトリは ~ に置き換えています)。

% which npm
~/.nodenv/shims/npm

疑ったもの

nodenv

nodebrewにするも現象は変わらず。

M2

M1で普通に動いているけど。M2でまた何か特有の問題が起きているのかと思ったけれど、情報はなく。

調査

nodenvはコマンド実装が分かりづらかったので、結果的にnodebrewにしたのが解決につながったかも。nodenv の npm はこれ(ホームディレクトリは ~ に置き換えています)。

#!/usr/bin/env bash
set -e
[ -n "$NODENV_DEBUG" ] && set -x

program="${0##*/}"
if [ "$program" = "node" ]; then
  for arg; do
    case "$arg" in
    -e* | -- ) break ;;
    */* )
      if [ -f "$arg" ]; then
        export NODENV_DIR="${arg%/*}"
        break
      fi
      ;;
    esac
  done
fi

export NODENV_ROOT="~/.nodenv"
echo $program
echo $@
exec "/opt/homebrew/Cellar/nodenv/1.4.0/libexec/nodenv" exec "$program" "$@"

nodebrewのnpmはこれ。

% cat ~/.nodebrew/current/bin/npm
#!/usr/bin/env node
require('../lib/cli.js')(process)

ここから探っていって ~/.nodebrew/node/v18.7.0/lib/node_modules/npm/lib/npm.jsload 関数で処理が終わっているのが分かったので、エラーを出してみる。

% npm i yarn -g
[Error: ENOENT: no such file or directory, mkdir '~/.npm'] {
  errno: -2,
  code: 'ENOENT',
  syscall: 'mkdir',
  path: '~/.npm'
}

ん? .npm …?

 % ls -alt ~/.npm
lrwxr-xr-x  1 nakatsugawa  staff  17  6 14 15:30 ~/.npm -> /Volumes/SSD/.npm

このディレクトリは移行前端末はストレージ不足で、外部ストレージを使っていたのでした…orz

ってことでディレクトリを改めて作成して解決。

% rm -Rf ~/.npm
% mkdir ~/.npm
% npm i yarn -g 

added 1 package, and audited 2 packages in 1s

found 0 vulnerabilities

まとめ

原因が分かれば大した問題ではないのですが、原因とおぼしき場所が複数あると解決に時間がかかるという典型例でした。結果的にnodenvもM2も全く関係なかったので、誰の役に立つか分かりませんが。

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