Ł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ś.


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.


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

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


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.


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

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())

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!


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!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.