Łatwy sposób na wyświetlenie listy modułów węzłów, które mam połączone npm

124

Szukam polecenia, które wyświetli listę nazw globalnych modułów, które mam npm linkdo kopii lokalnych, a także ścieżkę lokalną.

W rzeczywistości lista wszystkich zainstalowanych modułów globalnie byłoby jeszcze lepiej, z npm link„D te oznaczone jakoś.

callum
źródło
1
npm -g lspowinien zawierać listę wszystkich modułów globalnych, ale nie wiem, czy zawiera listę połączonych modułów
Ferdi265
utrzymuj plik „package.json” dla swojej aplikacji
CM
1
@CeeAim Mam wiele aplikacji z wieloma pakietami package.json, mam też sporo globalnych modułów do innych celów, takich jak CLI, a wiele z nich jest rozwidlonych i npm link'd. Potrzebuję sposobu, żeby to śledzić.
callum

Odpowiedzi:

64

Czy próbowałeś po prostu wyświetlić node_moduleszawartość katalogu (np. ls -l node_modules | grep ^l)? To zwykłe linki symboliczne.

Jeśli naprawdę potrzebujesz znaleźć wszystkie linki symboliczne, możesz spróbować czegoś takiego jak find / -type d -name "node_modules" 2>/dev/null | xargs -I{} find {} -type l -maxdepth 1 | xargs ls -l.

mscdex
źródło
17
Nie działa z lokalnie połączonymi modułami w przestrzeni nazw (@ namespace / moduleName). Brutalnym rozwiązaniem może być:( ls -l node_modules ; ls -l node_modules/@* ) | grep ^l
Andrea Carraro
2
To rozwiązanie nie działa w systemie Windows (ani żadne inne rozwiązania).
Micah Zoltu
2
@MicahZoltu Będzie działać w systemie Windows, jeśli użyjesz terminala Git bash
Greg M.
1
W przypadku pakietów @scoped, po prostu dodaj -R do polecenia ls:ls -l -R ./node_modules | grep ^l
Romasato,
Poniżej znalazłem odpowiedź, która działa dla mnie stackoverflow.com/a/48593067/7491536
Jack Howard
196

Aby wyświetlić wszystkie globalnie połączone moduły, działa to (dokumentacja https://docs.npmjs.com/cli/ls ):

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

Musiałem jednak najpierw zaktualizować wersję npm na moim komputerze:

npm install npm@latest -g
Andrzej
źródło
15
Uznany za najprostsze rozwiązanie i pracę w systemie Windows. Chciałbym móc głosować za tym więcej niż raz.
Artif3x
Pierwszy działa bez --link=true. Moje środowisko: Win10, NVM = 1.1.7, bieżący węzeł = 8.14.0
Jeb50
1
i usunąć jeden z listy:npm unlink <package> -g
zamnuts
@ Jeb50 to ma sens, ponieważ połączone pakiety są instalowane globalnie.
KAS
20

Lepszą alternatywą dla analizowania lsjest użycie w findnastępujący sposób:

find . -type l

Możesz użyć -maxdepth 1tylko do przetwarzania pierwszego poziomu katalogu:

find . -maxdepth 1 -type l

Możesz użyć, -lsaby uzyskać dodatkowe informacje.

Na przykład, aby znaleźć moduły węzłów, które są połączone npm:

find node_modules -maxdepth 1 -type l -ls

Oto artykuł, dlaczego parsowanie lsnie jest najlepszym pomysłem

Konstantine Kalbazov
źródło
To było dla mnie przydatne - dzięki :) Streszczenie: gist.github.com/ryanve/5e28670dc459a4f83955b20f31b3a9e0
ryanve
13

Jeśli chcesz mieć ładny kolorowy wydruk npm list, możesz polubić:

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

co daje w moim aktualnym placu zabaw reż:

+-- 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 

Przyjmuje kilka założeń, ale w większości przypadków powinien działać lub być łatwy do dostosowania dzięki poniższym wyjaśnieniom.

  • użyj, \lsaby ominąć możliwe aliasy w Twojej lskomendzie
  • -Fopcja dodaje „@” wskaźnik linki
  • sedkomenda wybiera te linki i usuwa wskaźnik
  • xargsczęść przechodzi poprzedniego wyjścia jako argumentynpm ...
  • npm jest wywoływana z
    • listlub lswyświetlić listę modułów z wersjami
      • zamień na, llaby uzyskać szczegółowe informacje o każdym wymienionym module.
    • -g dla modułów globalnych i
    • --depth 0 dla krótkiej listy (opcjonalnie)
    • --long false (domyślnie z „listą”).

Problem: z jakiegoś powodu npm podaje mi w tej chwili obce wpisy (niekolorowane). Byłyby to te, które miałem " npm unlink " ed.

Aby uzyskać „ listę wszystkich zainstalowanych globalnie modułów ” w bieżącej ścieżce npm, po prostu to zrobisz

npm list -g

W przypadku dalszych potrzeb możesz zajrzeć

npm help folders

Nie możesz podążać wstecz za dowiązaniami symbolicznymi, chyba że przeskanujesz cały system plików i (wtedy nie jest to kwestia specyficzna dla npm).

Aby szybko znaleźć pliki i katalogi według nazwy, używam tego, locatektóry działa na indeksie odbudowywanym zwykle raz dziennie.

locate '*/node_modules'

i zacznij od tego miejsca (możesz zawęzić wyszukiwanie za pomocą --regexpopcji.

Wyboista droga
źródło
Używam bez, -gaby uzyskać lokalne / najbliższe przejściowe łącza zależności. Dzięki!
kross
4

Znalazłem to pytanie po tym, jak napisałem również własne narzędzie, tutaj jest dla kompletności: npm-list-linked .

Będzie on również rekurencyjnie podążał za wszystkimi połączonymi pakietami w dół w hierarchii, w mojej pracy czasami możemy mieć npm link2-3 poziomy, dzięki czemu można dokładnie zobaczyć, które są lokalne, a które nie, co pozwala uniknąć niespodzianek.

$ npm-list-linked
Linked packages in /home/user/projects/some-project/
    @prefix/package 0.2.7
        other-package 0.1.2
Stoffe
źródło
3

Stworzyłem moduł Node.js, który używa fsdo sprawdzania linków symbolicznych utworzonych przez npm linklub w inny sposób.

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

var symlinked = require("symlinked")

console.log(symlinked.names())
ryanve
źródło
2
Byłoby naprawdę urocze, gdybyś dodał do tego plik wykonywalny CLI, szczególnie w świetle medium.com/@maybekatz/… . Większość przypadków użycia, w których trzeba znaleźć pakiety dowiązane symbolicznie, pochodzi z CLI.
cchamberlain
z jakiegoś powodu nie mogłem wykryć żadnych linków :(
JacopKane
@cchamberlain Czy możesz wskazać mi dobre narzędzie CLI do modelowania interfejsu API? Lub zdecydowanie nie krępuj się przesłać komendę CLI do github.com/ryanve/symlinked :)
ryanve
@JacopKane Czy możesz opublikować problem ze szczegółami na github.com/ryanve/symlinked/issues/new ?
ryanve
1
@ryanve - gotowe github.com/ryanve/symlinked/pull/1 - dodałem również obsługę pakietów w określonym zakresie, ponieważ to nie działało. Uznanie za prostą konstrukcję! :)
cchamberlain
1

Widzę siebie i innych, którzy często mają to samo pytanie. Napisałem dla siebie mały CLI wezwany link-statusdo wyświetlenia tych informacji, może to pomóc też innym! Sprawdź to tutaj!

danmakenoise
źródło
0
find `npm root -g` -maxdepth 2 -type l

aby pokazać linki globalne, w tym pakiety w przestrzeni nazw.

Odpowiedź @ Andrew działa czasami:

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

ale w niektórych przypadkach wysadziłem w błąd peer dep. Mam nadzieję, że to komuś pomoże!

BaronVonKaneHoffen
źródło