Comment nettoyer le dossier node_modules des packages qui ne sont pas dans package.json?

338

Supposons que j'installe des packages de projet npm installqui recherchent les package.jsonmodules à installer. Après un certain temps, je vois que je n'ai pas besoin d'un module spécifique et je supprime sa dépendance package.json. Ensuite, je supprime d'autres modules package.jsoncar ils ne sont plus nécessaires et d'autres sont remplacés par des alternatives.

Maintenant, je veux nettoyer le node_modulesdossier afin que seuls les modules répertoriés dans package.jsony restent et le reste doit y aller, quelque chose comme npm clean. Je sais que je peux les supprimer manuellement, mais j'aimerais avoir une fonctionnalité de sucre prête à l'emploi pour cela.

Sergei Basharov
la source

Réponses:

407

Je pense que tu cherches npm prune

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

Cette commande supprime les packages "étrangers". Si un nom de package est fourni, seuls les packages correspondant à l'un des noms fournis sont supprimés.

Les packages superflus sont des packages qui ne sont pas répertoriés dans la liste des dépendances du package parent.

Voir les documents: https://docs.npmjs.com/cli/prune

David Sherret
la source
1
Pour autant que je sache, dans la nouvelle version de NPM, toutes les dépendances sont situées dans le node_modulesdossier racine , et pas comme auparavant, où chaque dépendance avait ses propres dépendances installées dans leurs propres node_modulesdossiers ... avec d'innombrables copies des mêmes dépendances ... donc ne npm pruneprend cela en considération? parce que ces dépendances profondes ne sont pas écrites sur le principal package.jsonde votre projet .. prune doit regarder récursivement.
vsync
2
@vsync La réduction de duplication est réalisée avec la commande npm dedupe docs.npmjs.com/cli/dedupe . Il essaie de simplifier l'arborescence des nœuds en déplaçant les dépendances vers le haut de l'arborescence.
knaos
J'ai vu que NPM prune ne parvient pas à supprimer les choses qui se gâtent généralement lorsque mon référentiel d'entreprise contient quelque chose de bouché. Ensuite, je dois rm-rf. Ce serait bien s'il y avait un "coup de tout, puis tout recommencer d'un coup"
ggb667
210

Vous pouvez supprimer votre dossier node_modules / puis réinstaller les dépendances de package.json.

rm -rf node_modules/
npm install

Cela effacerait tous les packages installés dans le dossier actuel et n'installerait que les dépendances de package.json. Si les dépendances ont déjà été installées, npm essaiera d'utiliser la version mise en cache, en évitant de télécharger la dépendance une deuxième fois.

adamduren
la source
4
Oui, je sais que je peux utiliser cette méthode mais je suis curieux de savoir pourquoi il n'y a toujours pas de solution plus élégante pour cela.
Sergei Basharov
Existe-t-il vraiment aucune commande npm pour supprimer node_modules autre que la suppression du dossier?
Anders
4
Sur la plate-forme Windows, il échoue lors de la suppression de node_modules via l'explorateur ou la ligne de commande (car le chemin d'accès à certains modules est supérieur à 256). Il devrait y avoir une commande npm pour le faire d'une manière plus propre.
Ravi Kumar
9
Ou en utilisant rmdir node_modules /s /qsous Windows. superuser.com/a/179661/440976
Wédney Yuri
5
Je pense que cette réponse manque un point très important: si vous êtes contraint par le trafic (c'est-à-dire que vous avez la connexion payante par mégaoctet comme le mobile) et que vous avez beaucoup de modules, cela peut vous coûter cher , tandis que l' pruneoption ne nécessite que vous ayez une connexion Internet.
Ivan Kolmychek
103

En raison de son imbrication de dossiers, Windows ne peut pas supprimer le dossier car son nom est trop long. Pour résoudre ce problème, installez RimRaf:

npm install rimraf -g

rimraf node_modules
user3844078
la source
8
Ou tout simplementrm -rf node_modules
kappaallday
16
rm -rf node_modulesne fonctionnera pas sur les fenêtres. Voir cette solution: superuser.com/a/179661/440976
Wédney Yuri
1
win7 x64 rimraf a très bien fonctionné via PowerShell .. merci
gorelative
Meilleure solution pour Windows 10 64 bits via CMD
Matt Cromwell
rm -rf node_modules n'a pas fonctionné pour moi sur Windows 10. Mais rimraf a fonctionné pour moi
ssmsnet
24

il suffit de courir

rm -r node_modules

en fait, vous pouvez supprimer n'importe quel dossier avec cela.

comme rm -r AnyFolderWhichIsNotDeletableFromShiftDeleteOrDelete .

ouvrez simplement le mouvement gitbash à la racine du dossier et exécutez cette commande

J'espère que cela vous aidera.

Ajay Kotnala
la source
2
Ne fonctionne pas, j'obtiens une erreur "permission refusée" (en utilisant gitbash.
drake035
3
ouvrez gitbash en mode administrateur. je suppose que cela aidera. ou modifier les paramètres de niveau d'autorisation de dossier
Ajay Kotnala
3
Cela supprimerait tous les packages. L'OP indique clairement "Je veux nettoyer le dossier node_modules afin que seuls les modules répertoriés dans package.json y restent".
Boaz
dans ce cas, mon ami, vous pouvez simplement faire "npm uninstall package_name" ou --save en tant que suffixe qui supprimera également son entrée du fichier package.json. npm uninstall package_name (supprimer le package) npm uninstall package_name --save (supprimer le package et supprimer l'entrée des dépendances dans le package json) npm uninstall package_name --save-dev (supprimer le package et supprimer l'entrée des devdependencies dans le package json)
Ajay Kotnala
22

Première installation mondiale de rimraf

npm install rimraf -g

accédez au chemin utilisant cmd où se trouve votre dossier node_modules et appliquez la commande ci-dessous

rimraf node_modules
Ankit Parmar
la source
bonne réponse, mais installer un package pour désinstaller les autres n'est pas une bonne idée cependant. npm pruneest une solution idéale.
Binayak Gouri Shankar
Oui, mais si vous souhaitez supprimer le dossier node_module de votre projet, c'est le moyen le plus simple et le plus simple.
Ankit Parmar
9

à partir de la version 6.5.0 npm prend en charge la commande clean-installpour actualiser en dur tous les packages

Giuseppe B
la source
1
C'est exactement ce dont j'avais besoin. Lorsque je mets à jour le nœud, la première chose qui se produit est "on dirait que vous avez changé votre environnement depuis l'exécution de" npm install "". Comme je suis déjà dans la console, il est plus facile de simplement faire une installation propre plutôt que de déconner en supprimant d'abord les dossiers, etc.
Jarrod McGuire
3

J'ai ajouté quelques lignes dans 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",
  ...
}

Si vous le souhaitez, cleanvous pouvez utiliser ceci rimraf node_modulesou rm -rf node_modules.

Ça fonctionne bien

Amitesh Singh
la source
1

Le meilleur article que j'ai trouvé à ce sujet est celui-ci: https://trilon.io/blog/how-to-delete-all-nodemodules-recursively

Le tout depuis la console et facile à exécuter à partir de n'importe quel dossier.

Mais comme résumé de l'article, cette commande permet de trouver la taille de chaque node_moduledossier trouvé dans différents projets.

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

Et pour les supprimer:

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

L'article contient également des instructions pour le shell Windows.

robertovg
la source
0

Supprimez / modifiez les packages qui ne sont pas nécessaires dans package-lock.json (les noms des packages seront écrits sous dépendances & devDependencies), puis

npm install

Fakrudeen
la source
-2

Utilisez la commande suivante au lieu de l'installation de npm

npm ci
Jasmin Mistry
la source
npm ci installe les packages répertoriés dans shrinkwrap.json
LuckyLikey