Düğüm modüllerini listelemenin kolay yolu npm bağlı mıyım?


123

Sahip olduğum genel modüllerin adlarını npm linkyerel kopyalara listeleyen ve aynı zamanda yerel yolu da listeleyen bir komut arıyorum .

Aslında, küresel olarak yüklenmiş tüm modüllerin bir listesi, bir şekilde işaretlenmiş olan npm link'd'ler ile daha da iyi olacaktır .


1
npm -g lstüm genel modülleri listelemeli, ancak bağlantılı modülleri listeleyip listelemediğini bilmiyorum
Ferdi265

uygulamanız için bir "package.json" dosyası bulundurun
CM

1
@CeeAim Çok sayıda package.jsons içeren bir çok uygulamam var, ayrıca CLI'ler gibi başka amaçlar için birkaç global modülüm var ve çoğu çatallı ve npm link'd. Takip etmenin bir yolunu bulmalıyım.
callum

Yanıtlar:


64

node_modulesDizin içeriğini listelemeyi denediniz ls -l node_modules | grep ^lmi (örneğin )? Bunlar normal sembolik bağlardır.

Gerçekten tüm sembolik bağları bulmanız gerekiyorsa , gibi bir şey deneyebilirsiniz find / -type d -name "node_modules" 2>/dev/null | xargs -I{} find {} -type l -maxdepth 1 | xargs ls -l.


17
Yerel olarak bağlantılı ad alanlı modüllerle (@ ad alanı / modülAdı) çalışmaz. Acımasız bir çözüm şunlar olabilir:( ls -l node_modules ; ls -l node_modules/@* ) | grep ^l
Andrea Carraro

2
Bu çözüm Windows'ta çalışmaz (veya başka çözümler de yapmaz).
Micah Zoltu

2
Eğer Git Bash terminalini kullanırsanız @MicahZoltu Windows üzerinde çalışacak
Greg M.

1
@Scoped paketler için, ls komutuna -R eklemeniz ls -l -R ./node_modules | grep ^l
yeterlidir

Aşağıdaki cevabı benim için çalışmak için buldum stackoverflow.com/a/48593067/7491536
Jack Howard

196

Tüm küresel bağlantılı modülleri listelemek için bu çalışır (dokümantasyon https://docs.npmjs.com/cli/ls ):

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

Öncelikle makinemdeki npm sürümünü güncellemem gerekiyordu, ancak:

npm install npm@latest -g

15
En basit çözüm olduğu ve Windows'ta çalıştığı için oy verildi. Keşke bunu bir kereden fazla yükseltebilseydim.
Artif3x

İlki w / o çalışır --link=true. Ortamım: Win10, NVM = 1.1.7, mevcut Düğüm = 8.14.0
Jeb50

1
ve listelenen birini kaldırmak için:npm unlink <package> -g
zamnuts

@ Jeb50 bu mantıklı, çünkü bağlantılı paketler global olarak kuruluyor.
kaş

20

Ayrıştırmaya daha iyi bir alternatif lsşu şekilde kullanmaktır find:

find . -type l

-maxdepth 1Yalnızca ilk dizin seviyesini işlemek için kullanabilirsiniz :

find . -maxdepth 1 -type l

-lsEk bilgi için kullanabilirsiniz .

Örneğin, npm bağlantılı düğüm modüllerini bulmak için:

find node_modules -maxdepth 1 -type l -ls

İşte bir makale ayrıştırma neden lsen iyi fikir değildir


Bu benim için yararlı oldu — teşekkürler :) Ana fikir
ryanve

13

Hoş bir renkli çıktı almak npm lististiyorsanız, beğenebilirsiniz:

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

mevcut oyun alanımdaki dir:

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

Birkaç varsayımda bulunur, ancak çoğu durumda işe yaramalı veya aşağıdaki açıklamalara uyması kolay olmalıdır.

  • kullanmak \lsiçin üzerinde bypass mümkün takma adları lskomutu
  • -Fseçenek ekler '@' bağlantıları için göstergeyi
  • sedKomut bu bağlantıları seçer ve göstergeyi kaldırır
  • xargsbölüm için bağımsız değişken olarak bir önceki çıkış geçernpm ...
  • npm ile çağrılır
    • listveya lssürümleri olan modülleri listelemek için
      • lllistelenen her bir modülle ilgili ayrıntıları almak için ile değiştirin .
    • -g küresel modüller için ve
    • --depth 0 sığ bir liste için (isteğe bağlı)
    • --long false ('liste' ile varsayılan).

Sorun: bazı nedenlerden dolayı npm şu anda benim için gereksiz girişler veriyor (renkli değil). Bunlar benim " npm bağlantısını kaldırmış " olanlardır .

Geçerli npm yolundaki " küresel olarak yüklenmiş tüm modüllerin listesi " için ,

npm list -g

Daha fazla ihtiyaç için bir göz atmak isteyebilirsiniz

npm help folders

Tüm dosya sisteminizi taramadığınız sürece sembolik bağları geriye doğru izleyemezsiniz ve (bu, npm'ye özgü bir soru değildir).

Dosya ve dizinleri isme göre hızlı bir şekilde bulmak için, locategenellikle günde bir kez yeniden oluşturulan bir dizin üzerinde çalışan kullanıyorum .

locate '*/node_modules'

ve oradan çalışmaya başlayın ( --regexpseçeneği ile aramayı daraltmak isteyebilirsiniz .


-gYerel / en yakın geçici bağımlılık bağlantılarımı almaksızın kullanıyorum . Teşekkürler!
kross

4

Bu soruyu kendi aracımı da yazdıktan sonra buldum, işte tamlık için: npm-list-linked .

Hiyerarşideki tüm bağlantılı paketleri yinelemeli olarak takip edecek, benim işimde bazen npm link2-3 seviye derinliğinde olabilir ve bu şekilde tam olarak hangisinin yerel olduğunu ve hangilerinin olmadığını görebilirsiniz, sürprizlerden kaçınıyor.

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

2

fsTarafından npm linkveya başka şekilde yapılmış sembolik bağlantıları kontrol etmek için kullanan bir Node.js modülü yaptım .

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

var symlinked = require("symlinked")

console.log(symlinked.names())

2
Bunun için bir CLI çalıştırılabilir dosyası eklerseniz , özellikle medium.com/@maybekatz/… ışığında çok hoş olur . Sembolik bağlantılı paketleri bulmaya yönelik çoğu kullanım durumu CLI'dandır.
cchamberlain

herhangi bir nedenle herhangi bir bağlantı tespit edemedi :(
JacopKane

@cchamberlain API'yi daha sonra modellemek için beni iyi bir CLI aracına yönlendirebilir misiniz? Veya github.com/ryanve/symlinked adresine bir cli komutuyla katkıda bulunmaktan kesinlikle çekinmeyin :)
ryanve

@JacopKane github.com/ryanve/symlinked/issues/new adresinde ayrıntılarla ilgili bir sorun yayınlayabiliyor musunuz?
ryanve

1
@ryanve - done github.com/ryanve/symlinked/pull/1 - Çalışmadığı için kapsamlı paket desteği de ekledim. Basit yapı için tebrikler! :)
cchamberlain

1

Kendimin ve başkalarının aynı soruyu sık sık sorduğunu görüyorum. link-statusBu bilgiyi görüntülemek için kendim için küçük bir CLI yazdım , başkalarına da yardımcı olabilir! Buradan kontrol edin !


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

ad alanlı paketler dahil olmak üzere genel bağlantıları göstermek için.

@ andrew'un cevabı bazen işe yarar:

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

ama bazı durumlarda eş dep hatalarım patladı. Umarım bu birine yardımcı olur!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.