Y at-il une commande pour supprimer tous les modules de la NGP global ? Si ce n’est pas le cas, que me Suggérez-vous ?
Réponses
Trop de publicités?Cela supprime tous npm
modules à l'échelle mondiale:
npm -g ls | grep -v 'npm@' | awk '/@/ {print $2}' | awk -F@ '{print $1}' | xargs npm -g rm
La commande fonctionne comme suit:
npm -g ls
listes de tous les nœuds dans le monde. Cela permettra d'imprimer quelque chose comme:
usr/local/lib
└─┬ npm@1.1.1
├── abbrev@1.0.3
├── block-stream@0.0.4
├── fast-list@1.0.2
..
grep -v 'npm@'
exclut les mnp lui-mêmeawk '/@/ {print $2}'
divise toutes les lignes contenant @ par défaut sélecteur d'enregistrement (vide). Cela prend soin de l'arbre, de sorte que seules des lignes comme celles -abbrev@1.0.3
restent.awk -F@ '{print $1}'
diviseabbrev@1.0.3
enabbrev
qui$1
et1.0.3
, qui est de 2 $(nous jeter loin).xargs npm -g rm
alors prend ce qui est à gauche (abbrev
) et le supprime.
Remarque: cette solution ne fonctionnera que sous *nix.
Mise à jour
Solution ci-dessus ne fonctionne pas de manière fiable avec des versions plus récentes de la ngp, car la structure de l'arbre semble avoir changé.
Comme Leonid Beschastny de répondre correctement points, il y a un drapeau qui imprime la sortie de l' ls
commande en machine parseable forme qui est préférable et rend l'analyse beaucoup plus facile et fiable.
La mise à jour de la commande ci-dessus avec cette information, la nouvelle version de la commande pour supprimer tous les modules npm à l'échelle mondiale ressemble maintenant à ceci:
npm ls -gp | awk -F/ '/node_modules/ && !/node_modules.*node_modules/ {print $NF}' | xargs npm -g rm
Cette version est inspirée par Leonid version, donc s'il vous plaît voter sa réponse.
J'ai essayé Kai Sternad's solution , mais il semble imparfait pour moi. Il y avait beaucoup de symboles spéciaux à gauche après le dernier awk
de la deps arbre lui-même.
Donc, je suis venu avec mon propre modification de Kai Sternad's solution:
npm ls -g -p | grep -v node_modules.*node_modules | awk -F/node_modules/ '{print $2}' | grep -vE '^(npm|)$' | xargs npm -g rm
npm ls -g -p
listes de tout le monde installé mnp modules dans parseable format:
/home/leonid/local/lib
/home/leonid/local/lib/node_modules/bower
/home/leonid/local/lib/node_modules/bower/node_modules/abbrev
...
grep -v node_modules.*node_modules
supprime tous les submodules à partir de la liste. Niveau supérieur uniquement deps reste après.
awk -F/node_modules/ '{print $2}'
extraits module de noms de chemins d'accès, formant la liste de tous à l'échelle mondiale-les modules installés.
grep -vE '^(npm|)$'
supprime mnp lui-même et les lignes vides.
xargs npm -g rm
des appels npm -g rm
pour chaque module dans la liste.
Comme Kai Sternad's solution, ça ne marchera que sous *nix.
Mise à jour:
J'ai utilisé le cachemire à l'idée de supprimer vérifier les modules imbriqués. Il a l'air encore plus simple maintenant:
npm ls -gp --depth=0 | awk -F/node_modules/ '{print $2}' | grep -vE '^(npm|)$' | xargs npm -g rm