Yarn: Befehl hinzufügen, um verknüpfte Pakete anzuzeigen

Erstellt am 7. Nov. 2016  ·  50Kommentare  ·  Quelle: yarnpkg/yarn

Ich denke, es wäre nützlich, einen Befehl zu haben, der aktuell verknüpfte Pakete (mit yarn link [package] ) im aktuellen Projekt anzeigt.

cat-feature

Hilfreichster Kommentar

Wie wäre es mit etwas Ähnlichem wie global ?

Usage: yarn link [add|ls|remove] [flags]

Alle 50 Kommentare

Wie wäre es mit etwas Ähnlichem wie global ?

Usage: yarn link [add|ls|remove] [flags]

Garnverknüpfung [hinzufügen|ls|entfernen] [Flags]

Ja, ich denke, das wäre sehr explizit und schön.

Irgendwelche Bewegungen oder Workarounds zu diesem?

Ich habe diese Problemumgehung gefunden: ls -l node_modules | grep ^l

@tnrich schöne Lösung, gibt es eine allgemeinere, die Namespace unterstützt? zB node_modules/@myCompany

@bingzheyuan du kannst es versuchen

( ls -l node_modules ; ls -l node_modules/@* ) | grep ^l

(aus dieser SO-Frage kopiert)

@jlegrone überprüft, funktioniert

Wird diese Funktion noch in Betracht gezogen? @kätzchen

+1. Es wäre schön, dies als eingebaut zu haben, obwohl ich im Moment ein eigenständiges Skript habe, das ich verwende:

find node_modules node_modules/\@* -depth 1 -type l -print | while read MODULE ; do
    echo "Linked module in use: $MODULE"
done

Dies ist besonders unter Windows hilfreich, da Sie wirklich möchten, dass Garn Ihnen sagt, womit es verbunden ist, wenn Sie Symlinks auf dieser Plattform debuggen.

hab gerade gesucht ob es das gibt...

Wichtiger als der Fall, dass die Kommentare hier Abhilfe schaffen (zumindest für mich), ist die Möglichkeit zu wissen, welche Garn-Links _verfügbar_ sind – das heißt, in welchen Verzeichnissen ich yarn link , und so was Es bestehen Assoziationen zwischen Paketnamen und Verzeichnissen, die diese Pakete enthalten.

Man könnte meinen, dass das Verzeichnis ~/.yarn-config/link die relevanten Informationen enthält – aber es ist leer.

@MikeTaylor Ich glaube, du suchst nach ~/.config/yarn/link

Ich war_! Ich danke dir sehr!

(Dadurch frage ich mich ein wenig, warum ich .yarn , .yarn-cache , .yarn-config , .yarnrc _and_ .config/yarn in meinem Home-Verzeichnis habe, aber lass es passieren.)

Finde diese Konfiguration nicht

PS C:\Users\me> ls ~/.config


    Directory: C:\Users\me\.config


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2018-03-29   5:59 PM                configstore

PS C:\Users\me> ls ~/.yarn-config
ls : Cannot find path 'C:\Users\me\.yarn-config' because it does not exist.

Die einzige Datei, die ich finde, ist ~/.yarnrc

@retog Wenn Sie Windows verwenden, sieht das C:\Users\<userName>\AppData\Local\Yarn\config\link .

Danke @TomGault , die Links sind da.

Hoffnung kann dieses lol für global und lokal haben

Dies würde das Debugging bei der Arbeit an der Cross-Repo-Integration massiv unterstützen!
(Situation, die ich gerade befinde)

Wäre in der Tat schön mit einem Befehl wie yarn link ls , um alle Links zu sehen, besonders wenn Sie sich nicht erinnern, woher ein Link erstellt wurde, damit Sie ihn entfernen können.

In der Zwischenzeit sollte dies für macOS/Linux funktionieren:

ls -la ~/.config/yarn/link/

Ich mache einen dummen Weg dafür, kann aktuelle Projektlinkliste anzeigen

https://www.npmjs.com/package/yarn-list-link

$ npx yarn-list-link
@node-novel\pattern-split
cjk-conv
lazy-cacache
regexp-cjk
uni-string

Auf meinem PC mit Windows 10 sind die Garnlinks hier:
~\AppData\Local\Yarn\Data\link\

irgendwelche Updates?

find node_modules -type l | grep -v .bin und find ~/.config/yarn/link -type l sind hilfreich, um verknüpfte bzw. verknüpfbare Module zu finden.

Um den @hubgit- Post zu ergänzen, glaube ich, dass Folgendes für Windows mit PowerShell
Get-ChildItem '.\node_modules\.bin\' | Where-Object {$_.LinkType -eq 'SymbolicLink'}

Dies ist sehr hilfreich, wenn es bereitgestellt wird. Gibt es irgendeinen Fortschritt?

+1

+1

Alternativ implementieren Sie #710.

Wenn ich yarn link ausführe und bereits ein Paket mit demselben Namen registriert ist, warum kann Garn dann den Pfad des bereits verknüpften Pakets nicht ausdrucken? Darüber hinaus könnte Garn intelligenter sein, indem die Verknüpfung des anderen Pakets aufgehoben und das aktuelle verknüpft wird (möglicherweise mit einem -f Flag).

+1

+1

Unter Windows funktioniert dir %LOCALAPPDATA%\yarn\data\link , ohne dass Sie Ihren Benutzernamen oder was auch immer kennen müssen.

+1

# yarn link list
yll () {
    current=$PWD
    for link in $(find $HOME/.config/yarn/link -type l)
    do
        cd $link"/../"$(readlink $link)
        echo $link $'\n==>' $PWD
    done
    cd $current
}

# yarn unlink [package]
yul () {
    current=$PWD
  link=$(find $HOME/.config/yarn/link -type l | grep $1$)
    cd $link"/../"$(readlink $link)
    yarn unlink
    cd $current
}

@torifat 2 und ein halbes Jahr, seit dieses Thema geöffnet und als neues Feature (Katzenfeature?) markiert wurde, und wir haben seitdem nichts mehr vom Garn-Team gehört. Irgendeine Bewegung dazu? :)

Dies hat mir geholfen, die verknüpften Pakete in meinem Projekt zu finden:

ls -l node_modules | grep ^l

https://stackoverflow.com/questions/24933955/easy-way-to-list-node-modules-i-have-npm-linked

Das Problem mit ls -l node_modules | grep ^l ist, dass es keine verknüpften _scoped_ Pakete anzeigt (Unterverzeichnisse unter einem @-Verzeichnis wie @types ).
Eine schnelle Lösung besteht darin, dem Befehl ls das rekursive Flag R hinzuzufügen. Kann nicht zur Leistung sprechen, da ich in einer relativ kleinen Abhängigkeitsliste getestet habe:

ls -lR node_modules | grep ^l

So liste ich derzeit verknüpfte Pakete in einem Projekt auf:

Bearbeiten: Nicht OSX-kompatibel

yllc() {
  find -L node_modules -maxdepth 3 -type d -xtype l | xargs -I{} sh -c "echo {} '->' $(realpath {})"
}

ergibt:

node_modules/@somname/somepkg -> /home/user/repos/somename-somepkg

So finde ich Pakete, die ich verlinken kann, einschließlich bereichsbezogener Pakete:

yll () {
  linkDir=~/.config/yarn/link
  find $linkDir -maxdepth 2 -type l | xargs realpath -s --relative-to $linkDir
}

ergibt:

@somename/foo
@othername/bar
somepkg
otherpkg

Ich kann dann fzf wie folgt verwenden:

yarn link $(yll | fzf -m)

Ich habe diese so oft verwendet, dass ich sie zu Bash-Aliasnamen gemacht habe:

alias yarn-linked="find . -type l | grep -v .bin | sed 's/^\.\/node_modules\///'"
alias yarn-unlink-all="yarn-linked | xargs yarn unlink && yarn install --check-files"

Da wir Lösungen veröffentlichen und sie hier alle so kompliziert erscheinen, möchte ich Ihnen allen helfen:

alias yarn-linked="find node_modules -type l -maxdepth 3 | grep -v .bin | cut -f2 -d/"

Kinderleicht.
Bearbeiten: Obwohl ich aussehe, mag ich die
Edit: Meine Lösung ist auch kompliziert! Verdammt, Troll scheitern!
Bearbeiten: @Bkucera , Ihre Lösung ist nicht MacOS-kompatibel :cry:

kann das mal jemand von garn oder npm untersuchen? es gibt eindeutig große nachfrage, bitte <3

+1

yll () {
  linkDir=~/.config/yarn/link
  find $linkDir -maxdepth 2 -type l | xargs realpath -s --relative-to $linkDir
}

Dies funktionierte wie ein Zauber. Danke für das Teilen!

Die Lösung, die für mich funktionierte, war einfach:

  • gehe zum ~/.config/yarn/link Ordner
  • Löschen Sie die Module, deren Verknüpfung Sie aufheben möchten

Ich denke, eine gute Lösung wäre es, diese Anweisungen der Nachricht hinzuzufügen

Die Verwendung von yarn 1.x in einem Projekt führte dazu, dass einige Aliase hinzugefügt wurden:

$ alias | grep yarn
yarn-linked='find -L $(find node_modules -type l) -type d -prune'
yarn-links='(cd $HOME/.config/yarn/link && find . -type l | cut -c 3-)'

Bei mir funktioniert es nicht. Ich habe keinen Ordner ~/.config/yarn/link , ich habe nur einen globalen Ordner, der leer ist.
Ich benutze Manjaro Linux, wenn das helfen könnte..

Wird das noch berücksichtigt?

Am Ende habe ich einen Yarn-Wrapper erstellt, der diese Funktionalität hinzufügt und automatisch @types Pakete in TypeScript-Projekten installiert: https://github.com/iansu/blarn

Es hört sich so an, als ob es keine Einwände gegen diese Funktionalität gibt, die dem Garn hinzugefügt wird, es muss nur von jemandem durchgeführt werden. Anforderungen:

  1. Möglichkeit, Pakete aufzulisten, die mit dem AKTUELLEN Projekt verknüpft wurden. Mit anderen Worten, überprüfen Sie den Ordner node_modules rekursiv auf symbolische Links zu externen (lokalen) Paketen.

  2. Möglichkeit, die Verknüpfung aller Pakete aufzuheben, die mit dem AKTUELLEN Projekt verknüpft wurden.

  3. Möglichkeit, Pakete aufzulisten, die im globalen Link-Registry-Verzeichnis registriert wurden ( $HOME/.config/yarn/link unter *nix, %LOCALAPPDATA%\yarn\data\link unter Windows)

Da yarn link [add|ls|remove] (einer der früheren Vorschläge) nicht strikt abwärtskompatibel ist, schlage ich vor: yarn link --list . Dieses Flag sollte eine Liste von BOTH (1) und (3) erstellen.

Außerdem schlage ich yarn unlink --all , um (2) zu erreichen.

Ich arbeite an einer PR. Ich kenne mich mit Garn-Interna überhaupt nicht aus, aber wenn es erfolgreich ist, werde ich beim Einreichen auf dieses Problem zurückverweisen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen