Yarn: Ajouter une commande pour afficher les packages liés

Créé le 7 nov. 2016  ·  50Commentaires  ·  Source: yarnpkg/yarn

Je pense qu'il serait utile d'avoir une commande qui affiche les packages actuellement liés (en utilisant yarn link [package] ) dans le projet en cours.

cat-feature

Commentaire le plus utile

Que diriez-vous de quelque chose de similaire à global ?

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

Tous les 50 commentaires

Que diriez-vous de quelque chose de similaire à global ?

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

lien de fil [ajouter|ls|supprimer] [drapeaux]

Oui, je pense que ce serait très explicite et agréable.

Un mouvement ou des solutions de contournement sur celui-ci?

J'ai trouvé cette solution de contournement : ls -l node_modules | grep ^l

@tnrich belle solution, existe-t-il une solution plus générale qui prend en charge l'espace de noms ? par exemple node_modules/@myCompany

@bingzheyuan tu peux essayer

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

(copié de cette question SO)

@jlegrone vérifié, fonctionne très bien, merci beaucoup

Cette fonctionnalité est-elle toujours envisagée ? @chatons

+1. Ce serait bien d'avoir ceci en tant que module intégré, bien que pour l'instant j'ai un script autonome que j'utilise :

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

Ceci est particulièrement utile sous Windows, car vous voulez vraiment que fil vous dise à quoi il pense qu'il est lié lors du débogage des liens symboliques sur cette plate-forme.

Je viens de chercher pour voir si cela existe...

Plus important que le cas pour lequel les commentaires ici fournissent des solutions de contournement (pour moi, au moins) est la possibilité de savoir quels liens de fil sont _disponibles_ - c'est-à-dire dans quels répertoires j'ai exécuté yarn link , et alors quoi des associations existent entre les noms de packages et les répertoires qui contiennent ces packages.

On pourrait penser que le répertoire ~/.yarn-config/link contiendrait les informations pertinentes -- mais il est vide.

@MikeTaylor, je pense que vous cherchez ~/.config/yarn/link

J'étais_! Merci beaucoup!

(Cela me laisse un peu me demander pourquoi j'ai .yarn , .yarn-cache , .yarn-config , .yarnrc _and_ .config/yarn dans mon répertoire personnel, mais laisse-le passer.)

Ne pas trouver cette config

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.

Le seul fichier que je trouve est ~/.yarnrc

@retog si vous utilisez Windows, il semble que le répertoire que vous recherchez soit : C:\Users\<userName>\AppData\Local\Yarn\config\link .

Merci @TomGault , les liens sont là.

l'espoir peut avoir ce lol pour le global et le local

Cela aiderait énormément au débogage lorsque vous travaillez sur l'intégration de référentiels croisés !
(Situation dans laquelle je me trouve actuellement)

Ce serait en effet bien avec une commande comme yarn link ls pour voir tous les liens, surtout lorsque vous ne vous souvenez pas d'où un lien a été créé, vous pouvez donc le supprimer.

En attendant, pour macOS/Linux, cela devrait fonctionner :

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

je fais un moyen stupide pour cela, je peux afficher la liste des liens du

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

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

Sur mon PC sous Windows 10, les liens fils sont ici :
~\AppData\Local\Yarn\Data\link\

les mises à jour ?

find node_modules -type l | grep -v .bin et find ~/.config/yarn/link -type l sont utiles pour trouver des modules liés et pouvant être liés, respectivement.

Pour tenter de compléter le post @hubgit , je pense que ce qui suit ferait l'affaire pour Windows en utilisant PowerShell :
Get-ChildItem '.\node_modules\.bin\' | Where-Object {$_.LinkType -eq 'SymbolicLink'}

Ce sera très utile s'il est fourni. Y at-il des progrès?

+1

+1

Vous pouvez également implémenter #710.

Si j'exécute yarn link et qu'il y a déjà un package enregistré avec le même nom, pourquoi le fil ne peut-il pas imprimer le chemin du package déjà lié ? De plus, le fil pourrait être plus intelligent en dissociant l'autre paquet et en associant le paquet actuel (peut-être avec un indicateur -f ).

+1

+1

Sous Windows, dir %LOCALAPPDATA%\yarn\data\link fonctionnera sans avoir besoin de connaître votre nom d'utilisateur ou autre.

+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 ans et demi depuis que ce numéro a été ouvert et a été étiqueté comme une nouvelle fonctionnalité (cat-feature ?), et nous n'avons pas eu de nouvelles de l'équipe de fil depuis. Un mouvement là-dessus ? :)

Cela m'a aidé à trouver les packages liés dans mon projet :

ls -l node_modules | grep ^l

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

Le problème avec ls -l node_modules | grep ^l est qu'il n'affichera pas les packages _scoped_ liés (sous-répertoires sous un répertoire @ comme @types )
La solution rapide consiste à ajouter le drapeau récursif R à la commande ls . Je ne peux pas parler de performances car j'ai testé dans une liste de dépendances relativement petite :

ls -lR node_modules | grep ^l

Voici ce que je fais pour répertorier les packages actuellement liés dans un projet :

Edit : pas compatible OSX

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

résulte en:

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

Voici ce que je fais pour trouver des packages que je peux lier, qui incluent des packages étendus :

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

résulte en:

@somename/foo
@othername/bar
somepkg
otherpkg

Je peux alors utiliser fzf comme ceci :

yarn link $(yll | fzf -m)

Je les utilise si souvent que je les ai transformés en alias bash :

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"

Puisque nous publions des solutions et qu'elles semblent toutes si compliquées, laissez-moi vous aider :

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

Peasy facile.
Edit: Bien que regardant, j'aime vraiment la solution @Bkucera ! :taper:
Edit : Ma solution est aussi compliquée ! Merde, troll échoue !
Edit : @Bkucera , ta solution n'est pas compatible MacOS :cry:

quelqu'un de fil ou npm peut-il examiner cela? il y a clairement une forte demande, s'il vous plaît <3

+1

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

Cela a fonctionné comme un charme. Merci d'avoir partagé!

La solution qui a fonctionné pour moi était de simplement :

  • aller dans le dossier ~/.config/yarn/link
  • supprimez les modules que vous souhaitez dissocier

Je pense qu'une bonne solution serait d'ajouter ces instructions au message

L'utilisation de yarn 1.x dans un projet a fini par ajouter quelques alias :

$ 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-)'

Cela ne fonctionne pas pour moi. Je n'ai pas de dossier ~/.config/yarn/link , tout ce que j'ai là est un dossier
J'utilise Manjaro linux, si cela peut aider ..

Est-ce encore considéré ?

J'ai fini par créer un wrapper de fil qui ajoute cette fonctionnalité et installe automatiquement les packages @types dans les projets TypeScript : https://github.com/iansu/blarn

Il semble qu'il n'y ait aucune objection à ce que cette fonctionnalité soit ajoutée au fil, cela doit juste être fait par quelqu'un. Conditions:

  1. Possibilité de répertorier les packages qui ont été liés au projet CURRENT. En d'autres termes, inspectez récursivement le dossier node_modules à la recherche de liens symboliques vers des packages externes (locaux).

  2. Possibilité de dissocier tous les packages qui ont été liés au projet EN COURS.

  3. Possibilité de répertorier les packages qui ont été enregistrés dans le répertoire de registre de liens global ( $HOME/.config/yarn/link sur *nix, %LOCALAPPDATA%\yarn\data\link sur Windows)

Puisque yarn link [add|ls|remove] (l'une des suggestions précédentes) n'est pas strictement rétrocompatible, je propose : yarn link --list . Ce drapeau devrait créer une liste de DEUX (1) et (3).

De plus, je propose yarn unlink --all comme moyen d'accomplir (2).

Je travaille sur un PR. Je ne connais pas du tout les composants internes du fil, mais en cas de succès, je ferai un lien vers ce problème lors de la soumission.

Cette page vous a été utile?
0 / 5 - 0 notes