Al ejecutar un comando utilizando npx, muchos desarrolladores observan que el paquete correspondiente no aparece en el directorio actual de su proyecto. Este comportamiento a menudo genera la pregunta: "¿Dónde instala exactamente npx estos paquetes?"
La Naturaleza Temporal de npx
npx está diseñado para ejecutar paquetes de Node.js sin necesidad de una instalación global o local persistente en tu proyecto. Utiliza un mecanismo de caché para descargar y ejecutar el paquete solo cuando es necesario, eliminando la sobrecarga de gestionar dependencias temporales.
Consideremos un ejemplo práctico. Si ejecutamos npx cowsay "Hola, Mundo!", el comando se ejecuta exitosamente y vemos la salida esperada. Sin embargo, si inspeccionamos el directorio actual con ls, no encontraremos rastro del paquete cowsay.
PS C:\Users\usuario\Desktop\proyecto> npx cowsay "Hola, Mundo!"
______________
< Hola, Mundo! >
--------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
PS C:\Users\usuario\Desktop\proyecto> ls
# La salida mostrará que no hay archivos ni directorios de cowsay.
Ubicación del Caché de npx
La respuesta a la incógnita es que npx aprovecha el directorio de caché de npm. Específicamente, los paquetes ejecutados mediante npx se instalan en subdirectorios únicos dentro de la carpeta _npx, que a su vez se encuentra dentro del directorio global de npm-cache.
Por ejemplo, después de ejecutar npx cowsay "Hola, Mundo!", el paquete cowsay se almacenaría en una ruta similar a C:\Users\usuario\AppData\Local\npm-cache\_npx\identificador_unico. De manera análoga, un comando como npx serve crearía su propio subdirectorio dentro de _npx.
Para verificar la ubicación exacta de tu caché de npm, puedes utilizar el siguiente comando:
PS C:\Users\usuario\Desktop\proyecto> npm config ls -l | findstr "cache"
cache = "C:\\Users\\usuario\\AppData\\Local\\npm-cache"
cache-max = null
cache-min = 0
La línea cache = "C:\\Users\\usuario\\AppData\\Local\\npm-cache" revela la ruta base del caché. Dentro de esta, npx gestiona su propia estructura de carpetas.
Demostración del Comportamiento de Caché
Una manera directa de confirmar este comportamiento de caché es eliminando manualmente una de estas entradas. Si borras la carpeta asociada con un paquete (por ejemplo, C:\Users\usuario\AppData\Local\npm-cache\_npx\identificador_unico_cowsay) y luego intentas ejecutar npx cowsay nuevamente, npx te pedirá que instales el paquete de nuevo, lo que demuestra que previamente lo estaba utilizando desde esa ubicación en caché.
PS C:\Users\usuario\Desktop\proyecto> npx cowsay "Hola, Mundo!"
Need to install the following packages:
cowsay@1.6.0
Ok to proceed? (y) y
______________
< Hola, Mundo! >
--------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
npx es una herramienta poderosa que simplifica la ejecución de utilidades CLI sin saturar las dependencias de tu proyecto. Aquí otro ejemplo divertido:
PS C:\Users\usuario\Desktop\proyecto> npx cowsay -f dragon "Hola, Mundo!"
______________
< Hola, Mundo! >
--------------
\ / \ //\
\ |\___/| / \// \\
/o o \__ / // | \ \
/ / \/_/ // | \ \
@_^_@'/ \/_ // | \ \
//_^_/ \/_ // | \ \
( //) | \/// | \ \
( / /) _|_ / ) // | \ _\
( // /) '/,_ _ _/ ( ; -. | _ _\.-~ .-~~~^-.
(( / / )) ,-{ _ `-.|.-~-. .~ `.
(( // / )) '/\ / ~-. _ .-~ .-~^-. \
(( /// )) `. { } / \ \
(( / )) .----~-.\ \-' .~ \ `. \^-.
///.----..> \ _ -~ `. ^-` ^-_
///-._ _ _ _ _ _ _}^ - - - - ~ ~-- ,.-~
/.-~