- Bash on Ubuntu on Windowsをインストールする
- bashを開いて
/mnt/
以下の消したいnode_modulesがあるフォルダに移動する。コマンドプロンプトでフォルダを開いてbashを実行すると自動的に移動してくれる 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文字。
npmでは依存ライブラリをnode_modules
というディレクトリの中に保存する。ライブラリhoge
が依存しているライブラリはnode_modules/hoge/node_modules/
の中に保存される。この方式をとることによって、使っているライブラリA
とB
が、それぞれ共通のライブラリC
に依存している場合に、A
とB
が使っている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 文字です。
対処方法をググると、「パスの途中をネットワークドライブとしてマウントしろ」とか「エクスプローラーから消さずに、npm uninstall
で消せ」とか出てくる。Deleteキー一発で消したい。
OS自体は対応しているので、削除するスクリプトでも書こうかなと思ったけど、ファイルを削除するスクリプトを書くのは怖い。自分で書いたスクリプトで消せるなら、同じような処理をするはずのrm
コマンドで消せるんじゃないかな?と思って試したら、消せた。コマンドプロンプトの関数であるrd /s /q
やdel /s /q
ではダメだった。