Un moyen facile de lister les modules de nœuds auxquels npm est lié?


123

Je recherche une commande qui listera les noms des modules globaux que j'ai npm linkaux copies locales, listant également le chemin local.

En fait, une liste de tous les modules installés globalement serait encore meilleure, avec les npm link'd' marqués d'une manière ou d'une autre.


1
npm -g lsdevrait lister tous les modules globaux, mais je ne sais pas si cela répertorie les modules liés
Ferdi265

maintenir un fichier "package.json" pour votre application
CM

1
@CeeAim J'ai beaucoup d'applications avec beaucoup de package.jsons, j'ai aussi pas mal de modules globaux à d'autres fins comme les CLI, et beaucoup sont fourchus et npm link'd. J'ai besoin d'un moyen de garder une trace.
callum

Réponses:


64

Avez-vous essayé de lister simplement le node_modulescontenu du répertoire (par exemple ls -l node_modules | grep ^l)? Ce sont des liens symboliques normaux.

Si vous avez vraiment besoin de trouver tous les liens symboliques, vous pouvez essayer quelque chose comme find / -type d -name "node_modules" 2>/dev/null | xargs -I{} find {} -type l -maxdepth 1 | xargs ls -l.


16
Ne fonctionne pas avec les modules d'espacement de noms liés localement (@ namespace / moduleName). Une solution brutale pourrait être:( ls -l node_modules ; ls -l node_modules/@* ) | grep ^l
Andrea Carraro

2
Cette solution ne fonctionne pas sous Windows (ni aucune autre solution).
Micah Zoltu

2
@MicahZoltu Cela fonctionnera sous Windows si vous utilisez le terminal Git bash
Greg M.

1
Pour les packages @scoped, ajoutez simplement -R à la commande ls:ls -l -R ./node_modules | grep ^l
Romasato

J'ai trouvé la réponse ci-dessous pour travailler pour moi stackoverflow.com/a/48593067/7491536
Jack Howard le

195

Pour lister tous les modules liés globalement, cela fonctionne (documentation https://docs.npmjs.com/cli/ls ):

npm ls -g --depth=0 --link=true

J'ai dû d'abord mettre à jour la version de npm sur ma machine:

npm install npm@latest -g

15
Voté pour être la solution la plus simple et travailler sous Windows. J'aimerais pouvoir voter plus d'une fois.
Artif3x

Le premier fonctionne sans --link=true. Mon environnement: Win10, NVM = 1.1.7, nœud actuel = 8.14.0
Jeb50

1
et pour supprimer celui qui est répertorié:npm unlink <package> -g
zamnuts

@ Jeb50 qui a du sens, car les packages liés sont installés globalement.
kas

20

Une meilleure alternative à l'analyse lsconsiste à utiliser findcomme ceci:

find . -type l

Vous pouvez utiliser -maxdepth 1pour traiter uniquement le premier niveau de répertoire:

find . -maxdepth 1 -type l

Vous pouvez utiliser -lspour plus d'informations.

Par exemple, pour rechercher des modules de nœuds liés à npm:

find node_modules -maxdepth 1 -type l -ls

Voici un article sur les raisons pour lesquelles l'analyse lsn'est pas la meilleure idée


Cela m'a été utile - merci :) Gist: gist.github.com/ryanve/5e28670dc459a4f83955b20f31b3a9e0
ryanve

13

Si vous voulez une belle sortie colorée npm list, vous aimerez peut-être:

\ls -F node_modules | sed -n 's/@$//p' | xargs npm ls -g --depth 0

ce qui donne dans mon répertoire actuel de jeu:

+-- color@0.11.1 
+-- grunt@0.4.5
+-- http-server@0.8.5 
+-- jsdom@8.0.2 
+-- jsonfile@2.2.3 
+-- underscore@1.8.3 
+-- xmlserializer@0.3.3 
`-- zombie@4.2.1 

Il fait quelques hypothèses mais il devrait fonctionner dans la plupart des cas, ou être facile à adapter avec les explications ci-dessous.

  • utiliser \lspour contourner les alias possibles sur votre lscommande
  • l' -Foption ajoute un indicateur «@» pour les liens
  • la sedcommande sélectionne ces liens et supprime l'indicateur
  • la xargspartie transmet la sortie précédente comme arguments ànpm ...
  • npm est invoqué avec
    • listou lspour lister les modules avec des versions
      • remplacez par llpour obtenir des détails sur chaque module répertorié.
    • -g pour les modules globaux et
    • --depth 0 pour une liste peu profonde (facultatif)
    • --long false (par défaut avec 'list').

Problème: pour une raison quelconque, npm me donne des entrées superflues pour le moment (non colorées). Ce seraient ceux que j'avais " npm unlink " ed.

Pour " une liste de tous les modules installés globalement " dans le chemin npm actuel, il vous suffit de faire

npm list -g

Pour d'autres besoins, vous voudrez peut-être consulter

npm help folders

Vous ne pouvez pas suivre les liens symboliques vers l'arrière sauf si vous analysez tout votre système de fichiers et (alors ce n'est pas une question spécifique à npm).

Pour trouver rapidement des fichiers et des répertoires par nom, j'utilise locatece qui fonctionne sur un index reconstruit généralement une fois par jour.

locate '*/node_modules'

et commencez à travailler à partir de là (vous voudrez peut-être affiner la recherche avec --regexpoption.


J'utilise sans -gpour obtenir mes liens de dépendance transitoires locaux / les plus proches. Merci!
kross

4

J'ai trouvé cette question après avoir également écrit mon propre outil, le voici par souci d'exhaustivité: npm-list-linked .

Il suivra également récursivement tous les paquets liés dans la hiérarchie, à mon travail, nous pouvons parfois avoir npm link2-3 niveaux de profondeur et de cette façon vous pouvez voir exactement lesquels sont locaux et lesquels ne le sont pas, évite les surprises.

$ npm-list-linked
Linked packages in /home/user/projects/some-project/
    @prefix/package 0.2.7
        other-package 0.1.2

2

J'ai créé un module Node.js qui utilise fspour vérifier les liens symboliques créés par npm linkou autrement.

https://www.npmjs.com/package/symlinked

var symlinked = require("symlinked")

console.log(symlinked.names())

2
Ce serait vraiment sympa si vous ajoutiez un exécutable CLI pour cela, en particulier à la lumière de medium.com/@maybekatz/… . La plupart des cas d'utilisation pour avoir besoin de trouver des packages liés par un lien symbolique proviennent de la CLI.
cchamberlain

n'a pu détecter aucun lien pour une raison quelconque :(
JacopKane

@cchamberlain pouvez-vous m'indiquer un bon outil CLI pour modéliser l'API après? Ou n'hésitez pas à contribuer une commande cli à github.com/ryanve/symlinked :)
ryanve

@JacopKane Pouvez-vous publier un problème sur github.com/ryanve/symlinked/issues/new avec des détails?
ryanve

1
@ryanve - done github.com/ryanve/symlinked/pull/1 - J'ai également ajouté la prise en charge des packages étendus car cela ne fonctionnait pas. Félicitations pour la structure simple! :)
cchamberlain

1

Je me vois et les autres ont souvent cette même question. J'ai écrit une petite CLI pour moi-même appelée link-statuspour afficher ces informations, cela peut aussi aider les autres! Découvrez-le ici!


0
find `npm root -g` -maxdepth 2 -type l

pour afficher les liens globaux, y compris les packages d'espacement de noms.

La réponse de @ andrew fonctionne parfois:

npm ls -g --depth=0 --link=true

mais a explosé sur des erreurs de dep peer pour moi à certaines occasions. J'espère que cela aide quelqu'un!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.