Einfache Möglichkeit, Knotenmodule aufzulisten, mit denen ich npm verknüpft habe?


123

Ich suche nach einem Befehl, der die Namen der globalen Module npm linkauflistet, die ich für lokale Kopien verwendet habe, sowie den lokalen Pfad.

In der Tat wäre eine Liste aller global installierten Module sogar noch besser, npm linkwenn die d irgendwie markiert wären .


1
npm -g lssollte alle globalen Module auflisten, aber ich weiß nicht, ob es verknüpfte Module
auflistet

Pflegen Sie eine "package.json" -Datei für Ihre Anwendung
CM

1
@CeeAim Ich habe viele Anwendungen mit vielen package.jsons, ich habe auch einige globale Module für andere Zwecke wie CLIs, und viele sind gegabelt und npm link'd. Ich brauche einen Weg, um den Überblick zu behalten.
Callum

Antworten:


64

Haben Sie versucht, nur den node_modulesVerzeichnisinhalt aufzulisten (z. B. ls -l node_modules | grep ^l)? Sie sind normale Symlinks.

Wenn Sie wirklich alle Symlinks finden müssen, können Sie so etwas versuchen find / -type d -name "node_modules" 2>/dev/null | xargs -I{} find {} -type l -maxdepth 1 | xargs ls -l.


16
Funktioniert nicht mit lokal verknüpften Modulen mit Namespace (@ Namespace / Modulname). Eine brutale Lösung könnte sein:( ls -l node_modules ; ls -l node_modules/@* ) | grep ^l
Andrea Carraro

2
Diese Lösung funktioniert nicht unter Windows (und auch keine anderen Lösungen).
Micah Zoltu

2
@MicahZoltu Es wird unter Windows funktionieren, wenn Sie das Git Bash Terminal verwenden
Greg M.

1
Für @ scoped-Pakete fügen Sie einfach -R zum Befehl ls hinzu:ls -l -R ./node_modules | grep ^l
Romasato

Ich habe die Antwort unten gefunden, um für mich zu arbeiten stackoverflow.com/a/48593067/7491536
Jack Howard

192

Dies funktioniert, um alle global verknüpften Module aufzulisten (Dokumentation https://docs.npmjs.com/cli/ls ):

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

Ich musste jedoch zuerst die Version von npm auf meinem Computer aktualisieren:

npm install npm@latest -g

15
Upvoted für die einfachste Lösung und die Arbeit unter Windows. Ich wünschte, ich könnte dies mehr als einmal positiv bewerten.
Artif3x

Der erste funktioniert ohne --link=true. Meine Umgebung: Win10, NVM = 1.1.7, aktueller Knoten = 8.14.0
Jeb50

1
und um eine zu entfernen, die aufgelistet ist:npm unlink <package> -g
Zamnuts

@ Jeb50 das macht Sinn, weil verknüpfte Pakete global installiert werden.
kas

20

Eine bessere Alternative zum Parsen lsist folgende find:

find . -type l

Sie können -maxdepth 1nur die erste Verzeichnisebene verarbeiten:

find . -maxdepth 1 -type l

Sie können -lsfür zusätzliche Informationen verwenden.

Zum Suchen von Knotenmodulen, die mit npm verknüpft sind:

find node_modules -maxdepth 1 -type l -ls

Hier ist ein Artikel, warum das Parsen lsnicht die beste Idee ist


Das war nützlich für mich - danke :) Gist: gist.github.com/ryanve/5e28670dc459a4f83955b20f31b3a9e0
Ryanve

13

Wenn Sie eine schöne farbige Ausgabe von möchten npm list, mögen Sie vielleicht:

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

was in meinem aktuellen Spielplatz dir gibt:

+-- 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 

Es werden einige Annahmen getroffen, aber es sollte in den meisten Fällen funktionieren oder sich mit den folgenden Erläuterungen leicht anpassen lassen.

  • Verwenden Sie \lsdiese Option, um mögliche Aliase in Ihrem lsBefehl zu umgehen
  • Die -FOption fügt ein '@' für Links hinzu
  • Der sedBefehl wählt diese Links aus und entfernt die Anzeige
  • Der xargsTeil übergibt die vorherige Ausgabe als Argumente annpm ...
  • npm wird aufgerufen mit
    • listoder lsum Module mit Versionen aufzulisten
      • Ersetzen durch ll, um Details zu jedem aufgelisteten Modul zu erhalten.
    • -g für die globalen Module und
    • --depth 0 für eine flache Auflistung (optional)
    • --long false (Standard mit 'Liste').

Problem: Aus irgendeinem Grund gibt npm im Moment überflüssige Einträge für mich (nicht farbig). Es wären diejenigen, die ich " npm unlink " ed hatte.

Für " eine Liste aller global installierten Module " im aktuellen npm-Pfad tun Sie dies einfach

npm list -g

Für weitere Bedürfnisse möchten Sie vielleicht einen Blick darauf werfen

npm help folders

Sie können Symlinks nur dann rückwärts folgen, wenn Sie Ihr gesamtes Dateisystem scannen und (dann ist das keine npm-spezifische Frage).

Um Dateien und Verzeichnisse schnell nach Namen zu finden, verwende ich locateeinen Index, der normalerweise einmal am Tag neu erstellt wird.

locate '*/node_modules'

und beginnen Sie von dort aus zu arbeiten (möglicherweise möchten Sie die Suche mit der --regexpOption verfeinern .


Ich verwende ohne -g, um meine lokalen / nächsten vorübergehenden Abhängigkeitsverknüpfungen zu erhalten. Vielen Dank!
Kross

4

Ich habe diese Frage gefunden, nachdem ich auch mein eigenes Tool geschrieben habe. Der Vollständigkeit halber hier: npm-list-linked .

Es wird auch rekursiv allen verknüpften Paketen in der Hierarchie folgen. Bei meiner Arbeit haben wir manchmal npm link2-3 Ebenen Tiefe und auf diese Weise können Sie genau sehen, welche lokal sind und welche nicht, um Überraschungen zu vermeiden.

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

2

Ich habe ein Node.js-Modul erstellt, mit fsdem nach Symlinks gesucht wird, die von npm linkoder auf andere Weise erstellt wurden.

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

var symlinked = require("symlinked")

console.log(symlinked.names())

2
Wäre wirklich süß, wenn Sie eine ausführbare CLI-Datei hinzufügen würden, insbesondere im Hinblick auf medium.com/@maybekatz/… . Die meisten Anwendungsfälle für das Auffinden von verknüpften Paketen stammen von der CLI.
Cchamberlain

konnte aus irgendeinem Grund keine Links erkennen :(
JacopKane

@cchamberlain Kannst du mich auf ein gutes CLI-Tool verweisen, nach dem die API modelliert werden kann? Oder
zögern Sie nicht,

@JacopKane Können Sie ein Problem mit Details auf github.com/ryanve/symlinked/issues/new veröffentlichen ?
Ryanve

1
@ryanve - erledigt github.com/ryanve/symlinked/pull/1 - Ich habe auch Unterstützung für Pakete mit Gültigkeitsbereich hinzugefügt, da dies nicht funktioniert hat. Ein großes Lob an die einfache Struktur! :)
Cchamberlain

1

Ich sehe, dass ich und andere oft dieselbe Frage haben. Ich habe eine kleine CLI für mich geschrieben link-status, um diese Informationen anzuzeigen. Sie kann auch anderen helfen! Schau es dir hier an!


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

um globale Links anzuzeigen, einschließlich Pakete mit Namespace.

@ Andrews Antwort funktioniert manchmal:

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

Aber bei einigen Gelegenheiten sind Peer-Dep-Fehler für mich in die Luft gesprengt worden. Hoffe das hilft jemandem!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.