How do you uninstall all dependencies listed in package.json (NPM)?

node.jsNpmUninstallation

node.js Problem Overview


If I have a package.json file defined in my application root and run npm install -g it will install all the dependencies defined in package.json, globablly.

However, this doesn't seem to work in reverse.

If I do npm uninstall -g in my application root it throws an error, expceting me to pass it a package name.

Shouldn't this also uninstall the same packages I installed?

Am I doing something wrong?

node.js Solutions


Solution 1 - node.js

If using Bash, just switch into the folder that has your package.json file and run the following:

for package in `ls node_modules`; do npm uninstall $package; done;

In the case of globally-installed packages, switch into your %appdata%/npm folder (if on Windows) and run the same command.

EDIT: This command breaks with npm 3.3.6 (Node 5.0). I'm now using the following Bash command, which I've mapped to npm_uninstall_all in my .bashrc file:

npm uninstall `ls -1 node_modules | tr '/\n' ' '`

Note: It would remove all dependencies list from package.json and package-lock.json rendering npm install useless as there would be no dependencies listed to be installed.

Added bonus? it's way faster!

https://github.com/npm/npm/issues/10187

Solution 2 - node.js

This worked for me:

command prompt or gitbash into the node_modules folder in your project then execute:

npm uninstall *

Removed all of the local packages for that project.

Solution 3 - node.js

For windows go to node_modules dir and run this in powershell

npm uninstall (Get-ChildItem).Name 

Solution 4 - node.js

I recently found a node command that allows uninstalling all the development dependencies as follows:

npm prune --production

As I mentioned, this command only uninstalls the development dependency packages. At least it helped me not to have to do it manually.

Solution 5 - node.js

Tip for Windows users: Run this PowerShell command from within node_modules parent directory:

ls .\node_modules | % {npm uninstall $_}

Solution 6 - node.js

// forcibly remove and reinstall all package dependencies
ren package.json package.json-bak
echo {} > package.json
npm prune
del package.json
ren package.json-bak package.json
npm i

This essentially creates a fake, empty package.json, calls npm prune to remove everything in node_modules, restores the original package.json and re-installs everything.

Some of the other solutions might be more elegant, but I suspect this is faster and exhaustive. On other threads I've seen people suggest just deleting the node_modules directory, but at least for windows, this causes npm to choke afterward because the bin directory goes missing. Maybe on linux it gets restored properly, but not windows.

Solution 7 - node.js

Actually there is no option to do that, if you want to uninstall packages from package.json simply do npm ls on the same directory that package.json relies and use npm uninstall <name> or npm rm <name> for the package you want to remove.

Solution 8 - node.js

Another SIMPLE option is to delete the node_modules and package-lock.json

rm -rf node_modules
rm -rf package-lock.json

After this you can try reinstalling the npm packages

Solution 9 - node.js

First, remove all packages from dependencies and devDependencies in package.json

Second, run npm install

That simple.

Solution 10 - node.js

  1. remove unwanted dependencies from package.json
  2. npm i

"npm i" will not only install missing deps, it updates node_modules to match the package.json

Solution 11 - node.js

Powershell users: foreach($package in ls node_modules){npm uninstall $package}

Thanks @JustMailer

Solution 12 - node.js

(Don't replicate these steps till you read everything)

For me all mentioned solutions didn't work. Soo I went to /usr/lib and run there

for package in `ls node_modules`; do sudo npm uninstall $package; done;

But it also removed the npm package and only half of the packages (till it reached letter n).

So I tried to install node again by the node guide.

# Using Ubuntu
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs

But it didn't install npm again.

So I decided to reinstall whole node sudo apt-get remove nodejs And again install by the guide above.

Now is NPM again working but the global modules are still there. So I checked the content of the directory /usr/lib/node_modules and seems the only important here is npm. So I edited the command above to uninstall everything except npm

for package in $(ls node_modules); do if [ "$package" != "npm" ]; then sudo npm uninstall $package; fi; done;

It removed all modules what were not prefixed @. Soo I extended the loop for subdirectories.

for package in $(ls node_modules); do if [  ${package:0:1} = \@ ]; then 
        for innerPackage in $(ls node_modules/${package}); do
                sudo npm uninstall "$package/$innerPackage";
        done;
fi; done;

My /usr/lib/node_modules now contains only npm and linked packages.

Solution 13 - node.js

Even you don't need to run the loop for that.

You can delete all the node_modules by using the only single command:-

npm uninstall `ls -1 node_modules | tr '/\n' ' '`

Solution 14 - node.js

Piggy-backing off of VIKAS KOHLI and jedmao, you can do this

single line version:

npm uninstall `ls -1 node_modules | grep -v ^@ | tr '/\n' ' '` `find node_modules/@* -type d -depth 1 2>/dev/null | cut -d/ -f2-3 | tr '\n' ' '`

multi-lined version:

npm uninstall \
`ls -1 node_modules | grep -v ^@ | tr '/\n' ' '` \
`find node_modules/@* -type d -depth 1 2>/dev/null | cut -d/ -f2-3 | tr '\n' ' '`

Solution 15 - node.js

Since this is still the first result on the Googler when searching how to remove all modules in NPM, I figured I'd share a small script for Powershell to remove all dependencies through NPM:

#Create a Packages Array to add package names to
$Packages = New-Object System.Collections.ArrayList

#Get all Production Dependencies by name
(Get-Content .\Package.json | ConvertFrom-JSON).dependencies.psobject.properties.name |
ForEach-Object { $Packages.Add($_) | Out-Null }

#Get all Dev Dependencies by name
(Get-Content .\Package.json | ConvertFrom-JSON).devDependencies.psobject.properties.name | 
ForEach-Object { $Packages.Add($_) | Out-Null }

#Remove each package individually
Foreach($Package in ($Packages | select -unique))
{ npm uninstall $Package }

#Clean up any remaining packages
$Modules = Get-ChildItem "node_modules"
if($Modules)
{ $Modules | ForEach-Object { Remove-Item ".\node_modules\$_" -Force -Recurse } }

This runs a more specific removal, rather than removing each module from node_modules individually.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionqodeninjaView Question on Stackoverflow
Solution 1 - node.jsjedmaoView Answer on Stackoverflow
Solution 2 - node.jsDruubaccaView Answer on Stackoverflow
Solution 3 - node.jsSameerView Answer on Stackoverflow
Solution 4 - node.jschaloView Answer on Stackoverflow
Solution 5 - node.jsy0n1View Answer on Stackoverflow
Solution 6 - node.jsmeemView Answer on Stackoverflow
Solution 7 - node.jsGntemView Answer on Stackoverflow
Solution 8 - node.jsHarsh PhoujdarView Answer on Stackoverflow
Solution 9 - node.jsamrographyView Answer on Stackoverflow
Solution 10 - node.jsMisaka_0x447fView Answer on Stackoverflow
Solution 11 - node.jsValentine BondarView Answer on Stackoverflow
Solution 12 - node.jssiOnzeeView Answer on Stackoverflow
Solution 13 - node.jsVIKAS KOHLIView Answer on Stackoverflow
Solution 14 - node.jsRyan LechaView Answer on Stackoverflow
Solution 15 - node.jsdakota zinnView Answer on Stackoverflow