Si estoy usando npx para ejecutar un binario como único, generará lo siguiente:
npx my-module /// npx: installed 1 in 1.34s /// Hello, from my module! ¿Dónde se almacenan estos archivos binarios de forma predeterminada? ¿ npx guarda los archivos binarios después de la ejecución, a la npm o simplemente los ejecuta y luego elimina los archivos?
Tengo entendido que npx buscará primero en el directorio local node_modules/.bin y luego en el directorio /usr/local/bin , antes de descargar el módulo. Pero revisé ambas ubicaciones y no veo el nuevo módulo...
La versión 7 de npm almacenará en caché los paquetes en un directorio _npx . Tiene un diseño de caché que aparentemente involucra un hash. Por ejemplo, para mí, npx shellcheck instala el ejecutable en ~/.npm/_npx/cca5ebdff9ce100b/node_modules/.bin/shellcheck . (Tenga en cuenta el cca5ebdff9ce100b ). Sin embargo, dudo mucho que se pueda confiar en que el algoritmo sea consistente en todas las versiones de npx .
El objetivo de npx es que puede ejecutar los paquetes sin instalarlos en algún lugar permanente. Así que no usaría esa ubicación de caché para nada. No me sorprendería que las entradas de la memoria caché se borraran de vez en cuando. No sé qué algoritmo, si lo hay, usa npx para la invalidación de caché basada en el tiempo.
Para obtener la ubicación desde la que npx ejecuta el paquete, puede usar -p para indicarle que instale un paquete y luego usar which <executable> o command -v <executable> para obtener la ruta. Entonces, por ejemplo, lo que hice anteriormente para obtener la ubicación del ejecutable shellcheck fue ejecutar npx -p shellcheck which shellcheck o npx -p shellcheck command -v shellcheck . Esos comandos asumen un sistema operativo Linux u otro similar a UNIX. No estoy seguro de cuál sería el equivalente para Windows.
$ npx -p shellcheck command -v shellcheck Need to install the following packages: shellcheck Ok to proceed? (y) /Users/trott/.npm/_npx/cca5ebdff9ce100b/node_modules/.bin/shellcheck $