¿Una forma fácil de enumerar los módulos de nodo que tengo npm vinculado?

123

Estoy buscando un comando que enumere los nombres de los módulos globales que tengo npm link en las copias locales, y que también enumere la ruta local.

De hecho, una lista de todos los módulos instalados globalmente sería aún mejor, con los npm link"d" marcados de alguna manera.

callum
fuente
1
npm -g lsdebería enumerar todos los módulos globales, pero no sé si enumera los módulos vinculados
Ferdi265
mantener un archivo "package.json" para su aplicación
CM
1
@CeeAim Tengo muchas aplicaciones con muchos package.jsons, también tengo bastantes módulos globales para otros propósitos como CLI, y muchos están bifurcados y npm link'd. Necesito una forma de realizar un seguimiento.
callum

Respuestas:

64

¿Intentaste simplemente enumerar el node_modules contenido directorio (por ejemplo ls -l node_modules | grep ^l)? Son enlaces simbólicos normales.

Si realmente necesita encontrar todos los enlaces simbólicos, puede intentar algo como find / -type d -name "node_modules" 2>/dev/null | xargs -I{} find {} -type l -maxdepth 1 | xargs ls -l.

mscdex
fuente
16
No funciona con módulos de espacio de nombres vinculados localmente (@ namespace / moduleName). Una solución brutal podría ser:( ls -l node_modules ; ls -l node_modules/@* ) | grep ^l
Andrea Carraro
2
Esta solución no funciona en Windows (ni otras soluciones).
Micah Zoltu
2
@MicahZoltu Funcionará en Windows si usa el terminal Git bash
Greg M.
1
Para paquetes @scoped, simplemente agregue -R al comando ls:ls -l -R ./node_modules | grep ^l
Romasato
Encontré la respuesta a continuación que me funciona stackoverflow.com/a/48593067/7491536
Jack Howard
195

Para enumerar todos los módulos vinculados globalmente, esto funciona (documentación https://docs.npmjs.com/cli/ls ):

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

Sin embargo, primero tuve que actualizar la versión de npm en mi máquina:

npm install npm@latest -g
Andrés
fuente
15
Votado a favor por ser la solución más simple y trabajar en Windows. Ojalá pudiera votar esto más de una vez.
Artif3x
El primero funciona sin --link=true. Mi entorno: Win10, NVM = 1.1.7, Nodo actual = 8.14.0
Jeb50
1
y para eliminar uno que está en la lista:npm unlink <package> -g
zamnuts
@ Jeb50 eso tiene sentido, porque los paquetes vinculados se instalan globalmente.
kas
20

Una mejor alternativa al análisis lses usarlo findasí:

find . -type l

Puede usar -maxdepth 1para procesar solo el primer nivel de directorio:

find . -maxdepth 1 -type l

Puede utilizar -lspara obtener información adicional.

Por ejemplo, para encontrar módulos de nodo que están vinculados a npm:

find node_modules -maxdepth 1 -type l -ls

Aquí hay un artículo por el que analizar lsno es la mejor idea

Konstantine Kalbazov
fuente
Esto fue útil para mí, gracias :) Gist: gist.github.com/ryanve/5e28670dc459a4f83955b20f31b3a9e0
ryanve
13

Si desea una salida en color agradable npm list, le puede gustar:

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

que da en mi directorio de juegos actual:

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

Hace algunas suposiciones, pero debería funcionar en la mayoría de los casos o ser fácil de adaptar con las explicaciones a continuación.

  • utilizar \lspara omitir posibles alias en su lscomando
  • la -Fopción agrega un indicador '@' para los enlaces
  • el sedcomando selecciona esos enlaces y elimina el indicador
  • la xargsparte pasa la salida anterior como argumentos anpm ...
  • npm se invoca con
    • listo lspara listar módulos con versiones
      • reemplace con llpara obtener detalles sobre cada módulo enumerado.
    • -g para los módulos globales y
    • --depth 0 para una lista poco profunda (opcional)
    • --long false (predeterminado con 'lista').

Problema: por alguna razón, npm me da entradas extrañas en este momento (sin color). Serían los que tuve " npm unlink " ed.

Para obtener " una lista de todos los módulos instalados globalmente " en la ruta npm actual, simplemente haga

npm list -g

Para otras necesidades, es posible que desee echar un vistazo a

npm help folders

No puede seguir los enlaces simbólicos hacia atrás a menos que escanee todo su sistema de archivos y (entonces esa no es una pregunta específica de npm).

Para encontrar rápidamente archivos y directorios por nombre, utilizo locateque funciona en un índice reconstruido generalmente una vez al día.

locate '*/node_modules'

y comience a trabajar desde allí (es posible que desee refinar la búsqueda con la --regexpopción.

Camino rocoso
fuente
Utilizo sin -gpara obtener mis enlaces de dependencia transitorios locales / más cercanos. ¡Gracias!
kross
4

Encontré esta pregunta después de que también escribí mi propia herramienta, aquí está para completar: npm-list-linked .

También seguirá recursivamente todos los paquetes vinculados hacia abajo en la jerarquía, en mi trabajo a veces podemos tener npm link2-3 niveles de profundidad y de esta manera puede ver exactamente cuáles son locales y cuáles no, evita sorpresas.

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

Hice un módulo Node.js que se usa fspara verificar los enlaces simbólicos creados por npm linko de otra manera.

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

var symlinked = require("symlinked")

console.log(symlinked.names())
Ryanve
fuente
2
Sería muy bueno si agregara un ejecutable CLI para esto, especialmente a la luz de medium.com/@maybekatz/… . La mayoría de los casos de uso para la necesidad de encontrar paquetes con enlaces simbólicos son de CLI.
cchamberlain
no pudo detectar ningún enlace por alguna razón :(
JacopKane
@cchamberlain, ¿puede indicarme una buena herramienta CLI para modelar la API después? O definitivamente siéntase libre de contribuir con un comando cli a github.com/ryanve/symlinked :)
ryanve
@JacopKane ¿Puedes publicar un problema en github.com/ryanve/symlinked/issues/new con detalles?
Ryanve
1
@ryanve - hecho github.com/ryanve/symlinked/pull/1 - También agregué compatibilidad con paquetes de alcance ya que eso no funcionaba. ¡Felicitaciones por la estructura simple! :)
cchamberlain
1

Me veo a mí y a los demás teniendo muchas veces esta misma pregunta. Escribí una pequeña CLI para mí llamada link-statuspara mostrar esta información, ¡también puede ayudar a otros! ¡Compruébalo aquí!

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

para mostrar enlaces globales, incluidos los paquetes con espacios de nombres.

La respuesta de @ andrew funciona algunas veces:

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

pero explotó en errores de depuración de pares para mí en algunas ocasiones. ¡Espero que ayude a alguien!

BaronVonKaneHoffen
fuente