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.
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 :
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 :
~/.config/yarn/link
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:
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).
Possibilité de dissocier tous les packages qui ont été liés au projet EN COURS.
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.
Commentaire le plus utile
Que diriez-vous de quelque chose de similaire à
global
?Usage: yarn link [add|ls|remove] [flags]