microsoft / Windows-Dev-Performance

A repo for developers on Windows to file issues that impede their productivity, efficiency, and efficacy
MIT License
438 stars 21 forks source link

File Explorer takes a long time to delete node_modules #21

Open nmoinvaz opened 4 years ago

nmoinvaz commented 4 years ago

Environment

Item Value
OS, Version / Build 10.0.19041.0 Microsoft Windows NT 10.0.19041.0
Processor Architecture AMD64
Processor Type & Model Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz, 3192 Mhz, 6 Core(s), 12 Logical Processor(s)
Memory 32GB
Storage Type, free / capacity (e.g. C: SSD 128GB / 512GB) SSD 2TB
Relevant apps installed Node.JS / NPM

Description

When working on a project that utilizes package manager npm, it creates a node_modules directory that contains at least 100,000 files. On larger projects it can be even more. Deleting the node_modules directory from File Explorer takes a long time, and some times it goes through capturing all the information about the files and fails on some further steps.

nodemodules4

Often times File Explorer is the first way that users and developers go to delete files. Only after File Explorer fails do they then have to result to a command prompt. It is quite annoying to have to drop to a command prompt just for this folder. I know I can't be the only developer who experiences this problem.

For a comparison, this is how long it takes to delete the folder on macOS:

nodemodules3

I realize that both operating systems do different things behind the scenes, but it is unlikely that I can believe that nothing can be done to improve the experience with deleting folders that have lots of files.

Steps to reproduce

  1. Must have npm project already (you can try CRA for example)
  2. npm run install
  3. Open file explorer and delete node_modules

Expected behavior

It should not take so long to delete all the files.

Actual behavior

It takes a significant amount of time. File Explorer goes through various steps of calculating time, etc, after which it presents an UAC dialog, and then another permissions dialog at which point I end up just canceling.

Suggestions

wolfmanfp commented 4 years ago

It also happens when you copy a Node.js project from an SSD to a USB drive, it could even take half an hour.

BrandonLive commented 3 years ago

One tip that can help here: Hold Shift when you invoke the delete command (whether from keyboard or via the menu). This will invoke the permanent delete flow, rather than moving everything to the recycle bin. It should usually be near instantaneous.

Of course, make sure you really want to delete things before using this approach :-)

nmoinvaz commented 3 years ago

I ran a test to see the experience when using shift+delete. The experience is a bit better but it still takes a ton of time even when deleting permanently.

nodeshiftdel

When deleting files normally, Windows Explorer will enumerate all the files and see if the file sizes are too big to be recycled. If they are too big to be recycled Explorer will prompt asking if you want to permanently delete them. I think that a change could be made to Windows Explorer, that if it detected 10,000+ files it would ask if you want to permanently delete them as the delete operation could take a lot time. But even if Explorer had this change the delete option is no where near the speed it is on macOS.

orcmid commented 3 years ago

I think I have very little skin in this particular game. I simply don't go there with projects and my projects are usually pretty small, befitting the size of my brain.

At the same time this strikes me as a kind of micro-managed compensation for badly-architected source, build structures, and out-of-control dependencies. I wonder what is served by pandering to that.

Now, I have been thinking that since pre-compiled headers and the ugliness of windows.h, so you can calibrate my attitude from that. I will now stifle myself for a few more years.

Eli-Black-Work commented 3 years ago

Taking another look at this, it feels like the most actionable of the original suggestions is this one:

  • Delete the folder immediately, and notify all apps of file deletes in the background.

I wonder if that would really speed things up? Seems like a nice idea, if so πŸ™‚

aminya commented 3 years ago

I recommend using fastcopy. It is much faster than Windows Explorer when it comes to doing operations on a large number of files.

image

It also happens when you copy a Node.js project from an SSD to a USB drive, it could even take half an hour.

When copying a large number of files to a slow USB drive, consider compressing the folder before copying.

crediblebytes commented 3 years ago

This should have way more traction. It takes more time to delete the folder than it does to run npm install, pull down all the packages and install them! Is this because all the files are not stored contiguously?

nathantaal commented 3 years ago

Plus one for this issue

mswezey23 commented 3 years ago

Been experiencing this issue for years now. As much as I love slingin code on Windows, this kills it for me...

robertkraig commented 3 years ago

This is not just an issue with windows. I use a macbook pro 2015 w/ 16gb of ram. Also takes forever to delete a node_modules folder. I believe my experience was significantly faster on linux than either macos or windows. But macos ssd is not nearly as fast as you'd expect.

mswezey23 commented 3 years ago

This is not just an issue with windows. I use a macbook pro 2015 w/ 16gb of ram. Also takes forever to delete a node_modules folder. I believe my experience was significantly faster on linux than either macos or windows. But macos ssd is not nearly as fast as you'd expect.

I daily a MacBook Pro (2019, and now a 2020) and never had any issues with node_modules. Granted mine isn't 2015.

I also, for a brief period, had a previous gen Mac Mini that I upgraded its spinning rust to a (still on sata) SSD. Still magnitudes faster than a current day Windows machine running on a pcie (nvme) SSD attempting to delete a node_modules folder.

schmorrison commented 3 years ago

In my case occasionally I need to delete node_modules to reinstall all packages. Instead of deleting node_modules directly I do the following:

~$ mv node_modules node_modules.del
~$ npm i 

And from the VSCode/File Explorer I Delete < node_modules.del

This way the packages can install under node_modules while node_modules.del is deleted. The deletion process is not quicker, but the reinstall can take place simultaneously. VSCode might complain about too many files to index until the folder is deleted if reinstalling at the same time.

1mike12 commented 2 years ago

I have nothing to add other than this has been something that's bothered me for so long but I've only just started to consciously look into it since working on a large project with a larger node_modules than before. rm -rf ing on a crappier macbook 3 years older should not be an order of magnitude faster than on windows.

chrisribe commented 2 years ago

Funny how and small project like https://fastcopy.jp/ can do it better than what windows can.... Especially on shift + delete, you would expect the same speed uggh :(

Khalilolgod commented 2 years ago

try rm -Recurse -Force .\node_modules\ in powershell inside the project directory.

zackpi commented 2 years ago

4min 30sec - "Shift+Delete" aka "Permanently Delete" 45sec - "rm -Recurse -Force .\node_modules\" 16sec - "rimraf .\node_modules\"

An added benefit is that rimraf is cross-platform πŸ˜ƒ

For comparison, I also have an M1 macbook, and running "rm -rf .\node_modules\" takes about 15sec, so likely this is as good as it'll get

j471n commented 2 years ago

Use rmdir node_modules in Powershell inside the project directory.

jahidhassan2424 commented 2 years ago

It also happens when you copy a Node.js project from an SSD to a USB drive, it could even take half an hour.

just delete the node_modules folder then copy it. Copying process will be completed in a dew second. Then in the new location simply run "npm i". Note: you wont loosew any folder in node_modules. All of your dependencies will be downloaded with the command "npm i""

Second Option you can try: create zip file of that folder containing node_modules then copy it. But option 1 is more efficient.

Jogai commented 1 year ago

Fastest way for me is:

del /f/s/q node_mdules > nul
rmdir /s/q node_modules

Got it from https://stackoverflow.com/a/6208144/141243

ikluhsman commented 1 year ago

Fastest way for me is:

del /f/s/q node_mdules > nul
rmdir /s/q node_modules

Got it from https://stackoverflow.com/a/6208144/141243

This does not resolve the issue, it produces the same behavior as described in the original report.

Jogai commented 1 year ago

Fastest way for me is:

del /f/s/q node_mdules > nul
rmdir /s/q node_modules

Got it from https://stackoverflow.com/a/6208144/141243

This does not resolve the issue, it produces the same behavior as described in the original report.

Its an alternative. And it can't produce the same behavior, because instead of the file explorer its using a cmd window. Totally different UI.

chrisribe commented 1 year ago

Fastest way for me is:

del /f/s/q node_mdules > nul
rmdir /s/q node_modules

Got it from https://stackoverflow.com/a/6208144/141243

It's a valid solution, just wish Microsoft would run that via the file explorer UI to avoid the long delete times.

ikluhsman commented 1 year ago

It doesn't avoid the long delete times.

On Mon, Mar 13, 2023, 9:17 PM ChrisRibe @.***> wrote:

Fastest way for me is:

del /f/s/q node_mdules > nul rmdir /s/q node_modules

Got it from https://stackoverflow.com/a/6208144/141243

It's a valid solution, just wish Microsoft would run that via the file explorer UI to avoid the long delete times.

β€” Reply to this email directly, view it on GitHub https://github.com/microsoft/Windows-Dev-Performance/issues/21#issuecomment-1467290024, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAH24VH7DENLOBU4VCBVOJTW37PMJANCNFSM4PQWRLTQ . You are receiving this because you commented.Message ID: @.***>

Jogai commented 1 year ago

Yes it does, see https://superuser.com/a/289399/471565

taleleuma commented 1 year ago

Fastest way for me is:

del /f/s/q node_mdules > nul
rmdir /s/q node_modules

Its an alternative. And it can't produce the same behavior, because instead of the file explorer its using a cmd window. Totally different UI.

Above solution is faster but not the fastest (compared to Mac or Linux). Kind of hacked solution. Plus, its not user-friendly and very risky to use on daily basis. Imagine, you copy-pasted del /f/s/q * > nul command on a wrong folder, say a default folder when you open command prompt. Your lose your windows user profile.

xieyezi commented 1 year ago

Is there any other way to solve this problem? Such as one cli or plugin?

xieyezi commented 1 year ago

4min 30sec - "Shift+Delete" aka "Permanently Delete" 45sec - "rm -Recurse -Force .\node_modules" 16sec - "rimraf .\node_modules"

An added benefit is that rimraf is cross-platform πŸ˜ƒ

For comparison, I also have an M1 macbook, and running "rm -rf .\node_modules" takes about 15sec, so likely this is as good as it'll get

I found that rimraf is really much faster, thanks

batzen commented 10 months ago

You could also try using my tool to delete. It should be much faster than the other tools. Grab it from here https://github.com/batzen/Batzendev.Tools/releases/tag/v6.0.0 or install via chocolatey choco install batzendev.tools. Feedback is appreciated.

Jogai commented 10 months ago

@batzen on your website it says that the tool is MIT licenced, but where is the actual source?

batzen commented 10 months ago

MIT doesn't require published sources. It's a private hobby project and I don't want to deal with all the overhead that comes with going OSS. I have enough OSS projects where I have to deal with all that. πŸ˜‰ So the tool is free, but not OSS.

wassimmohamed commented 9 months ago

below helped me.. https://spfx-app.dev/delete-the-nodemodules-folder-50-faster-on-windows