Cara mudah untuk membuat daftar modul node yang saya tautkan ke npm?

123

Saya mencari perintah yang akan mencantumkan nama modul global yang saya miliki npm linkke salinan lokal, juga mencantumkan jalur lokal.

Bahkan, daftar semua modul yang diinstal secara global akan lebih baik lagi, dengan npm linkyang entah bagaimana ditandai .

callum
sumber
1
npm -g lsharus mencantumkan semua modul global, tetapi saya tidak tahu apakah itu mencantumkan modul tertaut
Ferdi265
pertahankan file "package.json" untuk aplikasi Anda
CM
1
@CeeAim Saya memiliki banyak aplikasi dengan banyak package.jsons, saya juga memiliki beberapa modul global untuk tujuan lain seperti CLI, dan banyak juga yang bercabang dan npm link'd. Saya butuh cara untuk melacak.
callum

Jawaban:

64

Apakah Anda hanya mencoba membuat daftar node_modulesisi direktori (mis. ls -l node_modules | grep ^l)? Itu adalah symlink normal.

Jika Anda benar-benar perlu menemukan semua symlink, Anda dapat mencoba sesuatu seperti find / -type d -name "node_modules" 2>/dev/null | xargs -I{} find {} -type l -maxdepth 1 | xargs ls -l.

mscdex.dll
sumber
16
Tidak berfungsi dengan modul spasi nama yang ditautkan secara lokal (@ namespace / moduleName). Solusi brutal mungkin:( ls -l node_modules ; ls -l node_modules/@* ) | grep ^l
Andrea Carraro
2
Solusi ini tidak berfungsi di Windows (begitu pula solusi lain).
Mikha Zoltu
2
@MicahZoltu Ini akan bekerja pada Windows jika Anda menggunakan terminal bash Git
Greg M.22
1
Untuk paket @scoped, cukup tambahkan -R ke perintah ls:ls -l -R ./node_modules | grep ^l
Romasato
Saya menemukan jawaban di bawah ini bekerja untuk saya stackoverflow.com/a/48593067/7491536
Jack Howard
195

Untuk mendaftar semua modul yang ditautkan secara global, ini berfungsi (dokumentasi https://docs.npmjs.com/cli/ls ):

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

Saya harus memperbarui versi npm di komputer saya terlebih dahulu, meskipun:

npm install npm@latest -g
Andrew
sumber
15
Dipilih sebagai solusi paling sederhana dan berfungsi di Windows. Seandainya saya bisa memberi suara positif ini lebih dari sekali.
Artif3x
Yang pertama bekerja tanpa --link=true. Lingkungan saya: Win10, NVM = 1.1.7, Node saat ini = 8.14.0
Jeb50
1
dan untuk menghapus yang terdaftar:npm unlink <package> -g
zamnuts
@ Jeb50 itu masuk akal, karena paket tertaut diinstal secara global.
kas
20

Alternatif yang lebih baik untuk penguraian lsadalah dengan menggunakan findseperti ini:

find . -type l

Anda hanya dapat menggunakan -maxdepth 1untuk memproses tingkat direktori pertama:

find . -maxdepth 1 -type l

Anda dapat menggunakan -lsuntuk info tambahan.

Misalnya, untuk menemukan modul node yang ditautkan dengan npm:

find node_modules -maxdepth 1 -type l -ls

Berikut adalah artikel mengapa parsing lsbukanlah ide terbaik

Konstantine Kalbazov
sumber
Ini berguna bagi saya — terima kasih :) Inti
ryanve
13

Jika Anda menginginkan keluaran berwarna yang bagus npm list, Anda mungkin menyukai:

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

yang memberi di direktori taman bermain saya saat ini:

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

Itu membuat beberapa asumsi tetapi seharusnya berhasil dalam banyak kasus, atau mudah disesuaikan dengan penjelasan di bawah ini.

  • gunakan \lsuntuk melewati kemungkinan alias di filels perintah
  • itu -F pilihan menambahkan '@' indikator untuk link
  • itu sed perintah memilih link tersebut dan menghapus indikator
  • yang xargsbagian melewati keluaran sebelumnya sebagai argumen untuknpm ...
  • npm dipanggil dengan
    • listatau lsuntuk membuat daftar modul dengan versi
      • ganti dengan lluntuk mendapatkan detail tentang setiap modul yang terdaftar.
    • -g untuk modul global dan
    • --depth 0 untuk daftar dangkal (opsional)
    • --long false (default dengan 'daftar').

Masalah: untuk beberapa alasan npm memberikan entri asing untuk saya saat ini (tidak berwarna). Mereka akan menjadi orang-orang yang telah saya " npm unlink ".

Untuk " daftar semua modul yang diinstal secara global " di jalur npm saat ini, Anda cukup melakukannya

npm list -g

Untuk kebutuhan selanjutnya, Anda mungkin ingin melihatnya

npm help folders

Anda tidak dapat mengikuti symlinks mundur kecuali Anda memindai seluruh sistem file Anda dan (maka itu bukan pertanyaan khusus npm).

Untuk menemukan file dan direktori dengan cepat berdasarkan nama, saya menggunakan locateyang berfungsi pada indeks yang dibangun kembali biasanya sekali sehari.

locate '*/node_modules'

dan mulai bekerja dari sana (Anda mungkin ingin mempersempit pencarian dengan --regexpopsi.

Jalan berbatu
sumber
Saya menggunakan tanpa -guntuk mendapatkan tautan ketergantungan sementara lokal / terdekat. Terima kasih!
kross
4

Saya menemukan pertanyaan ini setelah saya juga menulis alat saya sendiri, ini untuk kelengkapannya: npm-list-linked .

Ini akan secara rekursif mengikuti semua paket tertaut ke bawah dalam hierarki juga, di pekerjaan saya terkadang kami memiliki npm link2-3 level dalam dan dengan cara ini Anda dapat melihat dengan tepat mana yang lokal dan mana yang tidak, menghindari kejutan.

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

Saya membuat modul Node.js yang digunakan fsuntuk memeriksa symlink yang dibuat oleh npm linkatau sebaliknya.

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

var symlinked = require("symlinked")

console.log(symlinked.names())
ryanve
sumber
2
Akan sangat menyenangkan jika Anda menambahkan CLI yang dapat dieksekusi untuk ini, terutama pada medium.com/@maybekatz/… . Kebanyakan kasus penggunaan untuk menemukan paket yang terhubung dengan symlink berasal dari CLI.
cchamberlain
tidak dapat mendeteksi tautan apa pun karena alasan tertentu :(
JacopKane
@cchamberlain dapatkah Anda mengarahkan saya ke alat CLI yang bagus untuk membuat model API setelahnya? Atau jangan ragu untuk memberikan perintah cli ke github.com/ryanve/symlinked :)
ryanve
@JacopKane Apakah Anda dapat memposting masalah di github.com/ryanve/symlinked/issues/new dengan detail?
ryanve
1
@ryanve - done github.com/ryanve/symlinked/pull/1 - Saya juga menambahkan dukungan paket terbatas karena tidak berfungsi. Kudos pada struktur sederhana! :)
cchamberlain
1

Saya melihat diri saya dan orang lain sering memiliki pertanyaan yang sama ini. Saya menulis CLI kecil untuk diri saya sendiri yang dipanggil link-statusuntuk menampilkan info ini, ini dapat membantu orang lain juga! Lihat di sini!

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

untuk menampilkan tautan global, termasuk paket dengan namespace.

Jawaban @ andrew terkadang berhasil:

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

tapi meledak pada kesalahan dep peer untuk saya pada beberapa kesempatan. Semoga itu bisa membantu seseorang!

BaronVonKaneHoffen
sumber