Yarn: Adicionar comando para mostrar pacotes vinculados

Criado em 7 nov. 2016  ·  50Comentários  ·  Fonte: yarnpkg/yarn

Acho que seria útil ter um comando que mostrasse pacotes vinculados atualmente (usando yarn link [package] ) no projeto atual.

cat-feature

Comentários muito úteis

Que tal algo semelhante a global ?

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

Todos 50 comentários

Que tal algo semelhante a global ?

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

link do fio [adicionar | ls | remover] [sinalizadores]

Sim, acho que seria muito explícito e agradável.

Qualquer movimento ou solução alternativa para este?

Encontrei esta solução alternativa: ls -l node_modules | grep ^l

@tnrich boa solução, há uma mais geral que suporte namespace? por exemplo, node_modules/@myCompany

@bingzheyuan você pode tentar

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

(copiado desta pergunta SO)

@jlegrone verificado, funciona muito bem, muito obrigado

Este recurso ainda está sendo considerado? @kittens

+1. Seria bom ter isso integrado, embora, por enquanto, eu tenha um script autônomo que uso:

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

Isso é especialmente útil no Windows, já que você realmente quer que o yarn diga a que ele pensa que está vinculado ao depurar links simbólicos nessa plataforma.

só procurei para ver se isso existe ...

Mais importante do que o caso em que os comentários aqui fornecem soluções alternativas (para mim, pelo menos) é a capacidade de saber quais links de fios estão _disponíveis_ - isto é, em quais diretórios eu executei yarn link , e daí o que existem associações entre nomes de pacotes e diretórios que contêm esses pacotes.

Alguém pode pensar que o diretório ~/.yarn-config/link conteria as informações relevantes - mas está vazio.

@MikeTaylor , acho que você está procurando ~/.config/yarn/link

Eu era_! Muito obrigado!

(Isso me deixa um pouco pensando por que tenho .yarn , .yarn-cache , .yarn-config , .yarnrc _and_ .config/yarn em meu diretório inicial, mas deixe passar.)

Não encontrando essa configuração

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.

O único campo que encontro é ~ / .yarnrc

@retog se você estiver usando o Windows, parece que o diretório que você está procurando é: C:\Users\<userName>\AppData\Local\Yarn\config\link .

Obrigado @TomGault , os links estão aí.

esperança pode ter isso lol para global e local

Isso ajudaria enormemente na depuração ao trabalhar na integração de repo cruzado!
(Situação em que me encontro atualmente)

Seria realmente bom com um comando como yarn link ls para ver todos os links, especialmente quando você não se lembra de onde um link foi criado, então você pode removê-lo.

Enquanto isso, para macOS / Linux, isso deve funcionar:

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

Eu faço uma maneira estúpida para isso, posso mostrar a lista de links do

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

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

No meu PC com Windows 10, os links do yarn estão aqui:
~\AppData\Local\Yarn\Data\link\

alguma atualização?

find node_modules -type l | grep -v .bin e find ~/.config/yarn/link -type l são úteis para localizar módulos vinculados e vinculáveis, respectivamente.

Em uma tentativa de complementar a postagem de @hubgit , acredito que o seguinte seria
Get-ChildItem '.\node_modules\.bin\' | Where-Object {$_.LinkType -eq 'SymbolicLink'}

Isso será muito útil se fornecido. Há algum progresso?

+1

+1

Alternativamente, implemente # 710.

Se estou executando yarn link e já existe um pacote registrado com o mesmo nome, por que o yarn não pode imprimir o caminho do pacote já vinculado? Além disso, o yarn poderia ser mais inteligente desvinculando o outro pacote e vinculando o atual (talvez com uma bandeira -f ).

+1

+1

No Windows, dir %LOCALAPPDATA%\yarn\data\link funcionará sem a necessidade de saber seu nome de usuário ou qualquer outra coisa.

+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 anos e meio desde que esta edição foi aberta e foi marcada como um novo recurso (recurso gato?), e não tivemos mais notícias da equipe do yarn desde então. Qualquer movimento sobre isso? :)

Isso me ajudou a encontrar os pacotes vinculados em meu projeto:

ls -l node_modules | grep ^l

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

O problema com ls -l node_modules | grep ^l é que ele não mostra pacotes _scoped_ vinculados (subdiretórios em um diretório @ como @types )
A solução rápida é adicionar o sinalizador recursivo R ao comando ls . Não posso falar de desempenho, pois testei em uma lista de dependências relativamente pequena:

ls -lR node_modules | grep ^l

Aqui está o que eu faço para listar os pacotes atualmente vinculados em um projeto:

Editar: Não compatível com OSX

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

resulta em:

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

Aqui está o que eu faço para encontrar pacotes que posso vincular, que incluem pacotes com escopo definido:

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

resulta em:

@somename/foo
@othername/bar
somepkg
otherpkg

Posso então usar fzf assim:

yarn link $(yll | fzf -m)

Tenho usado isso com tanta frequência que os transformei em aliases 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"

Já que estamos postando soluções e todas parecem tão complicadas aqui, deixe-me ajudá-los:

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

Mole-mole.
Edit: Embora pareça eu realmente gosto da solução
Edit: Minha solução também é complicada! Droga, troll falhou!
Edit: @Bkucera , sua solução não é compatível com MacOS: cry:

alguém do Yarn ou NPM pode dar uma olhada nisso? há claramente uma grande demanda, <3

+1

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

Isso funcionou como um encanto. Obrigado por compartilhar!

A solução que funcionou para mim foi apenas:

  • vá para a pasta ~/.config/yarn/link
  • exclua os módulos que deseja desvincular

Acho que uma boa solução seria adicionar essas instruções à mensagem

Usando yarn 1.x em um projeto, acabou adicionando alguns apelidos:

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

Não funciona para mim. Não tenho a pasta ~/.config/yarn/link , só tenho uma pasta
Eu uso o Manjaro linux, se isso pudesse ajudar ..

Isso ainda é considerado?

Acabei fazendo um wrapper de Yarn que adiciona essa funcionalidade, além de instalar automaticamente pacotes @types em projetos TypeScript: https://github.com/iansu/blarn

Parece que não há objeções a essa funcionalidade sendo adicionada ao fio, ela só precisa ser feita por alguém. Requisitos:

  1. Capacidade de listar pacotes que foram vinculados ao projeto CURRENT. Em outras palavras, inspecione recursivamente a pasta node_modules busca de links simbólicos para pacotes externos (locais).

  2. Capacidade de desvincular todos os pacotes que foram vinculados ao projeto CURRENT.

  3. Capacidade de listar pacotes que foram registrados no diretório de registro de link global ( $HOME/.config/yarn/link em * nix, %LOCALAPPDATA%\yarn\data\link no Windows)

Visto que yarn link [add|ls|remove] (uma das sugestões anteriores) não é estritamente compatível com as versões anteriores, proponho: yarn link --list . Este sinalizador deve criar uma lista de AMBOS (1) e (3).

Além disso, proponho yarn unlink --all como forma de realizar (2).

Estou trabalhando em um PR. Não estou familiarizado com os componentes internos do fio, mas se for bem-sucedido, voltarei a abordar este problema ao enviar.

Esta página foi útil?
0 / 5 - 0 avaliações