ng new
で新しいangularプロジェクトを立ち上げようとしたところ以下のようなエラーが発生
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm ERR! code EEXIST
npm ERR! syscall rename
npm ERR! path /Users//.npm/_cacache/tmp/48832045
npm ERR! dest /Users/.npm/_cacache/content-v2/sha512/f6/27/24a0bcfe85c5c27a1ee3adc8a7fbf48b5a6f86931136913be8632a77f29e1691d1577d02710c5196a7f6078e228b3f1d3acf603b5bc5cabaa6d17970f3b3
npm ERR! errno -13
npm ERR! EACCES: permission denied, rename '/Users/yusuke/.npm/_cacache/tmp/48832045' -> '/Users/yusuke/.npm/_cacache/content-v2/sha512/f6/27/24a0bcfe85c5c27a1ee3adc8a7fbf48b5a6f86931136913be8632a77f29e1691d1577d02710c5196a7f6078e228b3f1d3acf603b5bc5cabaa6d17970f3b3'
npm ERR! File exists: /Users/yusuke/.npm/_cacache/content-v2/sha512/f6/27/24a0bcfe85c5c27a1ee3adc8a7fbf48b5a6f86931136913be8632a77f29e1691d1577d02710c5196a7f6078e228b3f1d3acf603b5bc5cabaa6d17970f3b3
npm ERR! Remove the existing file and try again, or run npm
npm ERR! with --force to overwrite files recklessly.
解決方法
どうやら、npm がファイル操作中に既存のファイルに上書きできず、エラーを引き起こしたことを示している。
npm のキャッシュの問題が原因でファイルがロックされている場合があるため、キャッシュを削除してみると良いらしい。
以下のコマンドを実行してキャッシュを削除
npm cache clean --force
と思ったら、以下のようなエラーが発生
npm WARN using --force Recommended protections disabled.
npm ERR! code EACCES
npm ERR! syscall unlink
npm ERR! path /Users/.npm/_cacache/content-v2/sha512/03/aa/7fa6effa7f205c0354d1cff1aa5983d58a996b7ed716da0642f6aefd9e0342280791fd7de070475740797828d5d5fb7c20209d423e4250dc81ccea572cc8
npm ERR! errno -13
npm ERR!
npm ERR! Your cache folder contains root-owned files, due to a bug in
npm ERR! previous versions of npm which has since been addressed.
npm ERR!
npm ERR! To permanently fix this problem, please run:
npm ERR! sudo chown -R 501:20 "/Users/.npm"
npm ERR! A complete log of this run can be found in: /Users/.npm/_logs/2024-10-06T14_53_24_554Z-debug-0.log
以前にsudoを使ったことが原因
このエラーを調べてみると、以前にnpmコマンドをsudoで実行してしまったため、キャッシュホルダ内にroot権限で生成されたファイルが残っていて、通常ユーザではこれらのファイルを操作できなくなってしまっていることで起こるエラーらしい
よって言われた通りにコマンドを実行
sudo chown -R 501:20 "/Users/.npm"
元のエラーにはpermission deniedがあったため、もしかしたらこの段階でng new
が実行できるようになっていたのかもしないが、念の為キャッシュを削除
npm cache clean --force
無事実行できて、改めてng new
をすると、問題なく実行できた
反省
なんでもsudoで実行するのはやめるようにしよう…