Yarn: Agregar comando para mostrar paquetes vinculados

Creado en 7 nov. 2016  ·  50Comentarios  ·  Fuente: yarnpkg/yarn

Creo que sería útil tener un comando que muestre paquetes vinculados actualmente (usando yarn link [package] ) en el proyecto actual.

cat-feature

Comentario más útil

¿Qué tal algo similar a global ?

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

Todos 50 comentarios

¿Qué tal algo similar a global ?

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

enlace de hilo [añadir | ls | eliminar] [banderas]

Sí, creo que sería muy explícito y agradable.

¿Algún movimiento o solución alternativa en este caso?

Encontré esta solución alternativa: ls -l node_modules | grep ^l

@tnrich buena solución, ¿hay alguna más general que admita el espacio de nombres? por ejemplo, node_modules/@myCompany

@bingzheyuan puedes probar

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

(copiado de esta pregunta SO)

@jlegrone comprobado, funciona muy bien, muchas gracias

¿Se sigue considerando esta característica? @gatitos

+1. Sería bueno tener esto incorporado, aunque por ahora tengo un script independiente que uso:

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

Esto es especialmente útil en Windows, ya que realmente desea que el hilo le diga a qué cree que está vinculado al depurar enlaces simbólicos en esa plataforma.

solo busqué para ver si esto existe ...

Más importante que el caso de que los comentarios aquí brinden soluciones alternativas (para mí, al menos) es la capacidad de saber qué enlaces de hilo están _disponibles_, es decir, en qué directorios he ejecutado yarn link , y qué existen asociaciones entre los nombres de paquetes y los directorios que contienen esos paquetes.

Uno podría pensar que el directorio ~/.yarn-config/link contendría la información relevante, pero está vacío.

@MikeTaylor Creo que estás buscando ~/.config/yarn/link

Era_! ¡Muchas gracias!

(Esto me deja un poco preguntándome por qué tengo .yarn , .yarn-cache , .yarn-config , .yarnrc _and_ .config/yarn en mi directorio de inicio, pero dejalo pasar.)

No encontrar esa configuración

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.

El único archivo que encuentro es ~ / .yarnrc

@retog si está usando Windows, parece que el directorio que está buscando es: C:\Users\<userName>\AppData\Local\Yarn\config\link .

Gracias @TomGault , los enlaces están ahí.

Espero poder tener este lol para global y local.

¡Esto ayudaría enormemente a depurar cuando se trabaja en la integración de repositorios cruzados!
(Situación en la que me encuentro actualmente)

De hecho, sería bueno con un comando como yarn link ls para ver todos los enlaces, especialmente cuando no recuerda desde dónde se creó un enlace, para que pueda eliminarlo.

Mientras tanto, para macOS / Linux, esto debería funcionar:

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

hago una forma estúpida para esto, puedo mostrar la lista de enlaces del

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

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

En mi PC con Windows 10, los enlaces de hilo están aquí:
~\AppData\Local\Yarn\Data\link\

alguna actualización ?

find node_modules -type l | grep -v .bin y find ~/.config/yarn/link -type l son útiles para encontrar módulos enlazados y enlazables, respectivamente.

En un intento de complementar la publicación de @hubgit , creo que lo siguiente sería suficiente para Windows usando PowerShell:
Get-ChildItem '.\node_modules\.bin\' | Where-Object {$_.LinkType -eq 'SymbolicLink'}

Esto será muy útil si se proporciona. ¿Hay algún avance?

+1

+1

Alternativamente, implemente # 710.

Si estoy ejecutando yarn link y ya hay un paquete registrado con el mismo nombre, ¿por qué hilo no puede imprimir la ruta del paquete ya vinculado? Además, el hilo podría ser más inteligente al desvincular el otro paquete y vincular el actual (tal vez con una bandera -f ).

+1

+1

En Windows, dir %LOCALAPPDATA%\yarn\data\link funcionará sin necesidad de saber su nombre de usuario o lo que sea.

+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 años y medio desde que se abrió este número y se etiquetó como una nueva característica (¿característica de gato?), y no hemos tenido noticias del equipo de yarn desde entonces. ¿Algún movimiento sobre esto? :)

Esto me ayudó a encontrar los paquetes vinculados en mi proyecto:

ls -l node_modules | grep ^l

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

El problema con ls -l node_modules | grep ^l es que no mostrará paquetes _scoped_ vinculados (subdirectorios en un directorio @ como @types )
La solución rápida es agregar la bandera recursiva R al comando ls . No puedo hablar por el rendimiento ya que probé en una lista de dependencias relativamente pequeña:

ls -lR node_modules | grep ^l

Esto es lo que hago para enumerar los paquetes actualmente vinculados en un proyecto:

Editar: No compatible con OSX

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

resulta en:

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

Esto es lo que hago para encontrar paquetes que pueda vincular, que incluyen paquetes con ámbito:

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

resulta en:

@somename/foo
@othername/bar
somepkg
otherpkg

Entonces puedo usar fzf así:

yarn link $(yll | fzf -m)

Los he estado usando con tanta frecuencia que los he convertido en alias de 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"

Dado que estamos publicando soluciones y todas parecen tan complicadas aquí, permítanme ayudarlos a todos:

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

Pan comido.
Editar: ¡ Aunque me gusta mucho la solución
Editar: ¡ Mi solución también es complicada! ¡Maldita sea, troll fall!
Editar: @Bkucera , su solución no es compatible con MacOS: llorar:

¿Puede alguien de yarn o npm investigar esto? claramente hay una gran demanda, por favor <3

+1

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

Funcionó como por arte de magia. ¡Gracias por compartir!

La solución que funcionó para mí fue simplemente:

  • ir a la carpeta ~/.config/yarn/link
  • eliminar los módulos que desea desvincular

Creo que una buena solución sería agregar estas instrucciones al mensaje

Usando yarn 1.x en un proyecto, terminó agregando un par de 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-)'

No me funciona. No tengo la carpeta ~/.config/yarn/link , todo lo que tengo es una carpeta
Yo uso Manjaro linux, si eso pudiera ayudar.

¿Se sigue considerando esto?

Terminé haciendo una envoltura de Yarn que agrega esta funcionalidad, además de instalar automáticamente paquetes @types en proyectos de TypeScript: https://github.com/iansu/blarn

Parece que no hay objeciones a que esta funcionalidad se agregue al hilo, solo debe hacerlo alguien. Requerimientos:

  1. Posibilidad de enumerar los paquetes que se han vinculado al proyecto ACTUAL. En otras palabras, inspeccione recursivamente la carpeta node_modules busca de enlaces simbólicos a paquetes externos (locales).

  2. Posibilidad de desvincular todos los paquetes que se han vinculado al proyecto ACTUAL.

  3. Posibilidad de enumerar los paquetes que se han registrado en el directorio de registro de enlaces global ( $HOME/.config/yarn/link en * nix, %LOCALAPPDATA%\yarn\data\link en Windows)

Dado que yarn link [add|ls|remove] (una de las sugerencias anteriores) no es estrictamente compatible con versiones anteriores, propongo: yarn link --list . Esta bandera debe crear una lista de AMBOS (1) y (3).

Además, propongo yarn unlink --all como una forma de lograr (2).

Estoy trabajando en relaciones públicas. No estoy familiarizado en absoluto con las partes internas del hilo, pero si tiene éxito, lo vincularé a este problema cuando lo envíe.

¿Fue útil esta página
0 / 5 - 0 calificaciones