Maneira fácil de listar os módulos dos nós vinculados ao npm?


123

Estou procurando um comando que liste os nomes dos módulos globais que eu tenho npm linkpara cópias locais, também listando o caminho local.

De fato, uma lista de todos os módulos instalados globalmente seria ainda melhor, com npm linkos de alguma forma sinalizados .


1
npm -g lsdeve listar todos os módulos globais, mas eu não sei módulos se listas ligadas
Ferdi265

mantenha um arquivo "package.json" para seu aplicativo
CM

1
@CeeAim Eu tenho muitos aplicativos com muitos pacotes.jsons, também tenho alguns módulos globais para outros fins, como CLIs, e muitos são bifurcados e outros npm link. Eu preciso de uma maneira de acompanhar.
Callum

Respostas:


64

Você tentou apenas listar o node_modulesconteúdo do diretório (por exemplo ls -l node_modules | grep ^l)? Eles são links simbólicos normais.

Se você realmente precisar encontrar todos os links simbólicos, tente algo como find / -type d -name "node_modules" 2>/dev/null | xargs -I{} find {} -type l -maxdepth 1 | xargs ls -l.


16
Não funciona com módulos com espaço para nome vinculados localmente (@ namespace / moduleName). Uma solução brutal pode ser: #( ls -l node_modules ; ls -l node_modules/@* ) | grep ^l
Andrea Carraro

2
Esta solução não funciona no Windows (nem outras soluções).
Micah Zoltu 04/03

2
@MicahZoltu Ele irá funcionar no Windows se você usar a festa do terminal Git
Greg M.

1
Para pacotes @scoped, basta adicionar -R ao comando ls:ls -l -R ./node_modules | grep ^l
Romasato

Eu encontrei a resposta abaixo para trabalhar para mim stackoverflow.com/a/48593067/7491536
Jack Howard

193

Para listar todos os módulos vinculados globalmente, isso funciona (documentação https://docs.npmjs.com/cli/ls ):

npm ls -g --depth=0 --link=true

Eu tive que atualizar a versão do npm na minha máquina primeiro, no entanto:

npm install npm@latest -g

15
Promovido por ser a solução mais simples e trabalhar no Windows. Gostaria de poder votar isso mais de uma vez.
Artif3x

O primeiro funciona sem --link=true. Meu ambiente: Win10, NVM = 1.1.7, nó atual = 8.14.0
Jeb50 18/01/19

1
e para remover um listado:npm unlink <package> -g
zamnuts

@ Jeb50 que faz sentido, porque os pacotes vinculados são instalados globalmente.
kas

20

Uma alternativa melhor para a análise lsé usar findassim:

find . -type l

Você pode usar -maxdepth 1para processar apenas o primeiro nível de diretório:

find . -maxdepth 1 -type l

Você pode usar -lspara informações adicionais.

Por exemplo, para localizar módulos de nós vinculados ao npm:

find node_modules -maxdepth 1 -type l -ls

Aqui está um artigo por que analisar lsnão é a melhor ideia


Isso foi útil para mim - obrigado :) Gist: gist.github.com/ryanve/5e28670dc459a4f83955b20f31b3a9e0
ryanve

13

Se você deseja uma boa saída colorida npm list, pode gostar de:

\ls -F node_modules | sed -n 's/@$//p' | xargs npm ls -g --depth 0

que dá no meu dir playground atual:

+-- color@0.11.1 
+-- grunt@0.4.5
+-- http-server@0.8.5 
+-- jsdom@8.0.2 
+-- jsonfile@2.2.3 
+-- underscore@1.8.3 
+-- xmlserializer@0.3.3 
`-- zombie@4.2.1 

Ele faz algumas suposições, mas deve funcionar na maioria dos casos ou ser fácil de adaptar-se às explicações abaixo.

  • use \lspara ignorar possíveis aliases em seu lscomando
  • a -Fopção adiciona um indicador '@' para links
  • o sedcomando seleciona esses links e remove o indicador
  • a xargsparte passa a saída anterior como argumentos paranpm ...
  • npm é invocado com
    • listou lspara listar módulos com versões
      • substitua por llpara obter detalhes sobre cada módulo listado.
    • -g para os módulos globais e
    • --depth 0 para uma listagem superficial (opcional)
    • --long false (padrão com 'lista').

Problema: por alguma razão, o npm fornece entradas estranhas para mim no momento (não coloridas). Eles seriam aqueles que eu tinha " desassociado ".

Para " uma lista de todos os módulos instalados globalmente " no caminho atual do npm, basta fazer

npm list -g

Para outras necessidades, você pode querer dar uma olhada

npm help folders

Você não pode seguir os links simbólicos para trás, a menos que verifique todo o sistema de arquivos e (isso não é uma pergunta específica da NPM).

Para encontrar rapidamente arquivos e diretórios por nome, eu uso o locateque funciona em um índice reconstruído geralmente uma vez por dia.

locate '*/node_modules'

e comece a trabalhar a partir daí (você pode refinar a pesquisa com a --regexpopção


Uso sem -gpara obter meus links de dependência transitória local / mais próxima. Obrigado!
Kross

4

Eu encontrei essa pergunta depois que também escrevi minha própria ferramenta, aqui está a questão de completar: npm-list-linked .

Ele seguirá recursivamente todos os pacotes vinculados na hierarquia também; no meu trabalho, às vezes, podemos ter npm link2-3 níveis de profundidade e, dessa forma, você pode ver exatamente quais são locais e quais não, evita surpresas.

$ npm-list-linked
Linked packages in /home/user/projects/some-project/
    @prefix/package 0.2.7
        other-package 0.1.2

2

Eu criei um módulo Node.js que usa fspara verificar se há links simbólicos criados por npm linkou não.

https://www.npmjs.com/package/symlinked

var symlinked = require("symlinked")

console.log(symlinked.names())

2
Seria muito bom se você adicionasse um executável de CLI para isso, especialmente à luz de medium.com/@maybekatz/… . A maioria dos casos de uso por precisar encontrar pacotes com links simbólicos é da CLI.
22417 cchamberlain

não conseguiu detectar quaisquer links, por algum motivo :(
JacopKane

@cchamberlain, você pode me indicar uma boa ferramenta CLI para modelar a API depois? Ou definitivamente se sentir livre para contribuir com um comando da CLI para github.com/ryanve/symlinked :)
ryanve

@JacopKane Você pode publicar um problema em github.com/ryanve/symlinked/issues/new com detalhes?
Ryanve

1
@ryanve - done github.com/ryanve/symlinked/pull/1 - Também adicionei suporte a pacotes com escopo, pois isso não estava funcionando. Parabéns pela estrutura simples! :)
cchamberlain

1

Eu me vejo e outros tendo essa mesma pergunta muito. Eu escrevi uma pequena CLI para mim chamada link-statuspara exibir essas informações, também pode ajudar outras pessoas! Confira aqui!


0
find `npm root -g` -maxdepth 2 -type l

para mostrar links globais, incluindo pacotes com namespace.

A resposta do @ andrew funciona algumas vezes:

npm ls -g --depth=0 --link=true

mas explodi em erros de dep pares para mim em algumas ocasiões. Espero que ajude alguém!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.