Sergei Basharov
Sergei Basharov

Reputation: 53940

How to clean node_modules folder of packages that are not in package.json?

Assume I install project packages with npm install that looks into package.json for modules to be installed. After a while I see that I don't need some specific module and remove its dependency from package.json. Then I remove some other modules from package.json because they are not needed anymore and others are replaced with alternatives.

Now I want to clean node_modules folder so that only modules listed in package.json stay there and the rest must go, something like npm clean. I know I can remove them manually but would like to have some nice ready to use sugar functionality for that.

Upvotes: 534

Views: 1111829

Answers (17)

Otaboy Rakhmonov
Otaboy Rakhmonov

Reputation: 1

Remove node_modules and package-lock.json.
Run the following command in your terminal:

rm -rf node_modules package-lock.json

Upvotes: 0

Jack Luo
Jack Luo

Reputation: 451

I recently upgraded Angular from 14 to 15, and found that I need to do:

npm cache clean --force
npm cache verify
rm -rf node_modules/
npm install

If I don't do cache clean, the install will success locally, but failed when run deploy on server. This is because local install will use local cached package to install. be aware. :)

Upvotes: 12

kasirye nicholas
kasirye nicholas

Reputation: 7

Simply should run this rm -rf node_modules/ npm install

Upvotes: -3

Johannes
Johannes

Reputation: 89

You can also use npx in combination with rimraf to remove all node modules with one command, so you don't have to install rimraf first.

So go to the path where your node_modules folder is located by using cmd (in case you are not there already) and run the following command

npx rimraf node_modules

Upvotes: 8

Giuseppe B
Giuseppe B

Reputation: 1294

From version 6.5.0 npm supports the command clean-install (ci) to hard refresh all the packages.

Please, see the references:

Upvotes: 69

Michael de la Cruz
Michael de la Cruz

Reputation: 161

Just in-case somebody needs it, here's something I've done recently to resolve this:

npm ci - If you want to clean everything and install all packages from scratch:

-It does a clean install: if the node_modules folder exists, npm deletes it and installs a fresh one.

-It checks for consistency: if package-lock.json doesn’t exist or if it doesn’t match the contents of package.json, npm stops with an error.

https://docs.npmjs.com/cli/v6/commands/npm-ci

npm-dedupe - If you want to clean-up the current node_modules directory without deleting and re-installing all the packages

Searches the local package tree and attempts to simplify the overall structure by moving dependencies further up the tree, where they can be more effectively shared by multiple dependent packages.

https://docs.npmjs.com/cli/v6/commands/npm-dedupe

Upvotes: 16

hamid_reza hobab
hamid_reza hobab

Reputation: 929

rimraf is an package for simulate linux command [rm -rf] in windows. which is useful for cross platform support. for install its CLI:

npm install rimraf -g

Upvotes: 0

robertovg
robertovg

Reputation: 1037

The best article I found about it is this one: https://trilon.io/blog/how-to-delete-all-nodemodules-recursively

All from the console and easy to execute from any folder point.

But as a summary of the article, this command to find the size for each node_module folder found in different projects.

find . -name "node_modules" -type d -prune -print | xargs du -chs

And to actually remove them:

find . -name 'node_modules' -type d -prune -print -exec rm -rf '{}' \;

The article contains also instructions for windows shell.

Upvotes: 15

Amitesh Singh
Amitesh Singh

Reputation: 183

I have added few lines inside package.json:

"scripts": {
  ...
  "clean": "rmdir /s /q node_modules",
  "reinstall": "npm run clean && npm install",
  "rebuild": "npm run clean && npm install && rmdir /s /q dist && npm run build --prod",
  ...
}

If you want to clean only you can use this rimraf node_modules or rm -rf node_modules.

It works fine

Upvotes: 8

Jasmin Mistry
Jasmin Mistry

Reputation: 1476

Use following command instead of npm install

npm ci

Upvotes: 1

Ankit Parmar
Ankit Parmar

Reputation: 788

First globally install rimraf

npm install rimraf -g

go to the path using cmd where your node_modules folder and apply below command

rimraf node_modules

Upvotes: 30

Ajay Kotnala
Ajay Kotnala

Reputation: 1045

simple just run

rm -r node_modules

in fact, you can delete any folder with this.

like rm -r AnyFolderWhichIsNotDeletableFromShiftDeleteOrDelete.

just open the gitbash move to root of the folder and run this command

Hope this will help.

Upvotes: 49

Osify
Osify

Reputation: 2295

For Windows User, alternative solution to remove such folder listed here: http://ask.osify.com/qa/567

Among them, a free tool: Long Path Fixer is good to try: http://corz.org/windows/software/accessories/Long-Path-Fixer-for-Windows.php

Upvotes: 2

user3844078
user3844078

Reputation: 1581

Due to its folder nesting Windows can’t delete the folder as its name is too long. To solve this, install RimRaf:

npm install rimraf -g

rimraf node_modules

Upvotes: 136

David Sherret
David Sherret

Reputation: 106850

I think you're looking for npm prune

npm prune [<name> [<name ...]]

This command removes "extraneous" packages. If a package name is provided, then only packages matching one of the supplied names are removed.

Extraneous packages are packages that are not listed on the parent package's dependencies list.

See the docs: https://docs.npmjs.com/cli/prune

Upvotes: 528

Have you tried npm prune?

it should uninstall everything not listed in your package file

https://npmjs.org/doc/cli/npm-prune.html

Upvotes: 12

adamduren
adamduren

Reputation: 4267

You could remove your node_modules/ folder and then reinstall the dependencies from package.json.

rm -rf node_modules/
npm install

This would erase all installed packages in the current folder and only install the dependencies from package.json. If the dependencies have been previously installed npm will try to use the cached version, avoiding downloading the dependency a second time.

Upvotes: 362

Related Questions