Un modo semplice per elencare i moduli del nodo a cui ho collegato npm?


123

Sto cercando un comando che elencherà i nomi dei moduli globali che ho npm linknelle copie locali, elencando anche il percorso locale.

In effetti, un elenco di tutti i moduli installati a livello globale sarebbe ancora migliore, con l'estensionenpm link quelli contrassegnati in qualche modo.


1
npm -g lsdovrebbe elencare tutti i moduli globali, ma non so se elenca i moduli collegati
Ferdi265

mantenere un file "package.json" per la propria applicazione
CM

1
@CeeAim Ho molte applicazioni con molti package.jsons, ho anche alcuni moduli globali per altri scopi come CLI, e molti sono forkati e npm link'd. Ho bisogno di un modo per tenere traccia.
callum

Risposte:


64

Hai provato a elencare solo il node_modulescontenuto della directory (ad esempio ls -l node_modules | grep ^l)? Sono normali collegamenti simbolici.

Se hai davvero bisogno di trovare tutti i link simbolici, potresti provare qualcosa di simile find / -type d -name "node_modules" 2>/dev/null | xargs -I{} find {} -type l -maxdepth 1 | xargs ls -l.


16
Non funziona con i moduli con spazio dei nomi collegati localmente (@ namespace / moduleName). Una soluzione brutale potrebbe essere:( ls -l node_modules ; ls -l node_modules/@* ) | grep ^l
Andrea Carraro

2
Questa soluzione non funziona su Windows (né altre soluzioni).
Micah Zoltu

2
@MicahZoltu Funzionerà su Windows se utilizzi il terminale Git bash
Greg M.

1
Per i pacchetti @scoped, aggiungi semplicemente -R al comando ls:ls -l -R ./node_modules | grep ^l
Romasato

Ho trovato la risposta qui sotto per funzionare per me stackoverflow.com/a/48593067/7491536
Jack Howard,

195

Per elencare tutti i moduli collegati a livello globale, funziona (documentazione https://docs.npmjs.com/cli/ls ):

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

Tuttavia, ho dovuto prima aggiornare la versione di npm sulla mia macchina:

npm install npm@latest -g

15
Votato per essere la soluzione più semplice e lavorare in Windows. Vorrei poter votare questo più di una volta.
Artif3x

Il primo funziona senza --link=true. Il mio ambiente: Win10, NVM = 1.1.7, nodo corrente = 8.14.0
Jeb50

1
e per rimuoverne uno elencato:npm unlink <package> -g
zamnuts

@ Jeb50 che ha senso, perché i pacchetti collegati vengono installati a livello globale.
kas

20

Un'alternativa migliore all'analisi lsè usare in findquesto modo:

find . -type l

È possibile utilizzare -maxdepth 1per elaborare solo il primo livello di directory:

find . -maxdepth 1 -type l

È possibile utilizzare -lsper ulteriori informazioni.

Ad esempio, per trovare moduli nodo che sono collegati a npm:

find node_modules -maxdepth 1 -type l -ls

Ecco un articolo sul perché l'analisi lsnon è l'idea migliore


Questo è stato utile per me, grazie :) Gist: gist.github.com/ryanve/5e28670dc459a4f83955b20f31b3a9e0
ryanve

13

Se vuoi un bel risultato colorato da npm list, ti potrebbe piacere:

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

che dà nel mio attuale playground 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 

Fa alcune supposizioni, ma dovrebbe funzionare nella maggior parte dei casi o essere facile da adattare con le spiegazioni seguenti.

  • usa \lsper bypassare possibili alias sul tuols comando
  • il -F opzione aggiunge un indicatore "@" per i collegamenti
  • il sed comando seleziona quei collegamenti e rimuove l'indicatore
  • la xargsparte passa l'output precedente come argomenti anpm ...
  • npm viene richiamato con
    • listo lsper elencare i moduli con le versioni
      • sostituire con llper ottenere dettagli su ogni modulo elencato.
    • -g per i moduli globali e
    • --depth 0 per un elenco superficiale (opzionale)
    • --long false (predefinito con 'list').

Problema: per qualche motivo npm mi fornisce voci estranee al momento (non colorate). Sarebbero quelli che avevo " npm unlink " ed.

Per " un elenco di tutti i moduli installati a livello globale " nel percorso npm corrente, basta fare

npm list -g

Per ulteriori esigenze potresti voler dare un'occhiata

npm help folders

Non puoi seguire i collegamenti simbolici all'indietro a meno che non esegui la scansione dell'intero filesystem e (quindi non è una domanda specifica di npm).

Per trovare rapidamente file e directory per nome, utilizzo locateche funziona su un indice ricostruito di solito una volta al giorno.

locate '*/node_modules'

e inizia a lavorare da lì (potresti voler affinare la ricerca con l' --regexpopzione.


Uso senza -g per ottenere i miei collegamenti di dipendenza transitori locali / più vicini. Grazie!
kross

4

Ho trovato questa domanda dopo aver scritto anche il mio strumento, eccola qui per completezza: npm-list-linked .

Seguirà ricorsivamente anche tutti i pacchetti collegati nella gerarchia, nel mio lavoro a volte possiamo avere npm link2-3 livelli di profondità e in questo modo puoi vedere esattamente quali sono locali e quali no, evita sorprese.

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

2

Ho creato un modulo Node.js che utilizza fsper verificare i collegamenti simbolici creati danpm link o in altro modo.

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

var symlinked = require("symlinked")

console.log(symlinked.names())

2
Sarebbe davvero carino se aggiungessi un eseguibile CLI per questo, specialmente alla luce di medium.com/@maybekatz/… . La maggior parte dei casi d'uso per la necessità di trovare pacchetti con collegamento simbolico proviene dalla CLI.
cchamberlain

non è stato possibile rilevare alcun collegamento per qualche motivo :(
JacopKane

@cchamberlain puoi indicarmi un buon strumento CLI per modellare l'API dopo? O sicuramente sentiti libero di contribuire con un comando cli a github.com/ryanve/symlinked :)
ryanve

@JacopKane Sei in grado di pubblicare un problema su github.com/ryanve/symlinked/issues/new con i dettagli?
ryanve

1
@ryanve - done github.com/ryanve/symlinked/pull/1 - Ho anche aggiunto il supporto per i pacchetti con ambito poiché non funzionava. Complimenti per la struttura semplice! :)
cchamberlain

1

Vedo spesso me stesso e gli altri avere questa stessa domanda. Ho scritto una piccola CLI per me stesso chiamata link-statusper visualizzare queste informazioni, potrebbe aiutare anche gli altri! Dai un'occhiata qui!


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

per mostrare i collegamenti globali, inclusi i pacchetti con spazio dei nomi.

La risposta di @ andrew funziona qualche volta:

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

ma in alcune occasioni è esploso per errori di peer dep. Spero che aiuti qualcuno!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.