141 votes

Comment désinstallez-vous toutes les dépendances répertoriées dans package.json (NPM)?

Si j'ai un fichier package.json défini à la racine de mon application et que j'exécute npm install -g, il installera toutes les dépendances définies dans package.json, de manière globale.

Cependant, cela ne semble pas fonctionner dans l'autre sens.

Si je fais npm uninstall -g à la racine de mon application, cela renvoie une erreur, en attendant que je lui passe un nom de package.

Ne devrait-il pas désinstaller aussi les mêmes packages que j'ai installés?

Est-ce que je fais quelque chose de mal?

2voto

Valentine Bondar Points 109

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

Merci @JustMailer

2voto

user3026243 Points 6

(Ne répliquez pas ces étapes avant d'avoir lu le tout)

Pour moi, toutes les solutions mentionnées n'ont pas fonctionné. J'ai donc été dans /usr/lib et j'ai exécuté ceci :

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

Mais cela a également supprimé le paquet npm et seulement la moitié des paquets (jusqu'à ce qu'il atteigne la lettre n).

Donc j'ai essayé de réinstaller node en suivant le guide de node.

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

Mais cela n'a pas réinstallé npm à nouveau.

Alors j'ai décidé de réinstaller node entièrement sudo apt-get remove nodejs Et d'installer à nouveau en suivant le guide ci-dessus.

Maintenant, NPM fonctionne à nouveau mais les modules globaux sont toujours là. J'ai donc vérifié le contenu du répertoire /usr/lib/node_modules et il semble que le seul important ici soit npm. J'ai donc modifié la commande ci-dessus pour désinstaller tout sauf npm

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

Cela a supprimé tous les modules qui n'étaient pas préfixés par @. J'ai donc étendu la boucle pour les sous-répertoires.

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;

Mon /usr/lib/node_modules ne contient désormais que npm et des paquets liés.

1voto

VIKAS KOHLI Points 1994

Même vous n'avez pas besoin d'exécuter la boucle pour cela.

Vous pouvez supprimer tous les node_modules en utilisant une seule commande :

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

1voto

Ryan Lecha Points 71

En s'appuyant sur VIKAS KOHLI et jedmao, vous pouvez le faire

version d'une seule ligne :

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' ' '`

version multi-lignes :

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' ' '`

1voto

dakota zinn Points 11

Étant donné que c'est toujours le premier résultat sur Google lorsque l'on recherche comment supprimer tous les modules dans NPM, j'ai pensé partager un petit script pour Powershell afin de supprimer toutes les dépendances via NPM:

#Créez un tableau de packages pour ajouter les noms des packages
$Packages = New-Object System.Collections.ArrayList

#Obtenez toutes les dépendances de production par nom
(Get-Content .\Package.json | ConvertFrom-JSON).dependencies.psobject.properties.name |
ForEach-Object { $Packages.Add($_) | Out-Null }

#Obtenez toutes les dépendances de développement par nom
(Get-Content .\Package.json | ConvertFrom-JSON).devDependencies.psobject.properties.name | 
ForEach-Object { $Packages.Add($_) | Out-Null }

#Supprimez chaque package individuellement
Foreach($Package in ($Packages | select -unique))
{ npm uninstall $Package }

#Nettoyez les packages restants
$Modules = Get-ChildItem "node_modules"
if($Modules)
{ $Modules | ForEach-Object { Remove-Item ".\node_modules\$_" -Force -Recurse } }

Cela exécute une suppression plus spécifique, plutôt que de supprimer chaque module de node_modules individuellement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X