LoginSignup
5

More than 5 years have passed since last update.

Windows 10でnpmのnode_modulesを削除する方法

Posted at
  1. Bash on Ubuntu on Windowsをインストールする
  2. bashを開いて/mnt/以下の消したいnode_modulesがあるフォルダに移動する。コマンドプロンプトでフォルダを開いてbashを実行すると自動的に移動してくれる
  3. rm -rf node_modules

Cygwinでも良い。

詳細

Explorerではここまでしか開けないが、最も長いパスは、node_modules/babel-preset-es2015/node_modules/babel-plugin-transform-es2015-computed-properties/node_modules/babel-helper-define-map/node_modules/babel-helper-function-name/node_modules/babel-traverse/node_modules/babel-code-frame/node_modules/chalk/node_modules/strip-ansi/node_modules/ansi-regex/package.jsonの310文字。

:innocent: :innocent: :innocent: :innocent:

npmでは依存ライブラリをnode_modulesというディレクトリの中に保存する。ライブラリhogeが依存しているライブラリはnode_modules/hoge/node_modules/の中に保存される。この方式をとることによって、使っているライブラリABが、それぞれ共通のライブラリCに依存している場合に、ABが使っているCのバージョンが異なっていても問題が無くなる。

その代償として、ファイル数が増える。babel-preset-es2015内のファイルサイズの合計は94.1 MB、ファイル数は69,632個、フォルダ数は2,542個だった。また、依存関係が深ければ深いほどファイルシステム上のパスも長くなる。

LinuxやMacではパスが長くても問題無いのだが、Windowsは長いパスを扱えない。正確には、OSやファイルシステムは対応しているけれど、エクスプローラーやコマンドプロンプトが対応していない。Windows APIのドキュメントには長いパスを扱う方法の記載があるのに、なぜMicrosoft謹製のエクスプローラーやコマンドプロンプトが対応していないのか理解に苦しむ。

lpFileName
作成または開く対象のオブジェクトの名前を保持している、NULL で終わる文字列へのポインタを指定します。
Windows NT/2000:この関数の ANSI 版では、名前は最大 MAX_PATH 文字に制限されています。この制限をほぼ 32,000 ワイド文字へ拡張するには、この関数の Unicode 版を呼び出し、パスの前に "\?\" という接頭辞を追加してください。詳細については、MSDN ライブラリの「」(ファイル名の規則)を参照してください。
Windows 95/98:文字列の長さは、最大 MAX_PATH 文字です。

CreateFile 関数

対処方法をググると、「パスの途中をネットワークドライブとしてマウントしろ」とか「エクスプローラーから消さずに、npm uninstallで消せ」とか出てくる。Deleteキー一発で消したい。

OS自体は対応しているので、削除するスクリプトでも書こうかなと思ったけど、ファイルを削除するスクリプトを書くのは怖い。自分で書いたスクリプトで消せるなら、同じような処理をするはずのrmコマンドで消せるんじゃないかな?と思って試したら、消せた。コマンドプロンプトの関数であるrd /s /qdel /s /qではダメだった。

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
5