Para encontrar el directorio que utiliza un script de npm en tu Mac, comprueba qué paquete es el propietario del script y, a continuación, imprime el directorio desde el interior de dicho script. npm ejecuta un script desde la carpeta de su paquete, incluso cuando inicias npm run desde otro lugar. En un proyecto con workspaces, el paquete del workspace seleccionado puede ser la carpeta relevante. Los siguientes pasos te ayudarán a identificar la ruta exacta y a distinguirla de la carpeta donde escribiste el comando.

1. Encuentra el paquete y el script que estás ejecutando

Abre Terminal y dirígete a la carpeta del proyecto donde normalmente ejecutas npm. macOS utiliza zsh de forma predeterminada en Terminal, aunque tu shell se puede cambiar. Usa pwd para mostrar tu directorio actual y, a continuación, lista los archivos para ver si esa carpeta contiene un archivo package.json. La guía de Terminal de Apple explica cómo introducir comandos en Terminal y utilizar herramientas como ls.

pwd
ls

Si no estás seguro de qué paquete define el script, inspecciona el archivo package.json en la carpeta actual. Puedes mostrarlo con cat package.json o abrirlo en un editor de texto. Busca el nombre del script dentro del objeto scripts. Por ejemplo, en "scripts": { "build": "node build.js" }, el nombre del script que se ejecutará es build. No asumas que la carpeta raíz del proyecto es la propietaria del script si se trata de un repositorio con workspaces.

2. Comprueba el directorio esperado por npm

Para las versiones actuales de npm, los scripts se ejecutan desde la raíz de la carpeta del paquete, independientemente del directorio desde el que hayas invocado npm run. En un proyecto estándar, esa es la carpeta que contiene el package.json del paquete. En un proyecto con workspaces, npm puede ejecutar el script en el contexto de un workspace seleccionado; el paquete del workspace es el que hay que comprobar. Consulta la documentación de npm sobre directorios de trabajo de scripts y ejecución de scripts en workspaces.

Este comportamiento documentado es un buen punto de partida, pero si el script cambia de directorio internamente o necesitas confirmar lo que ve un comando en particular, imprime la ruta durante la ejecución. Un comando de shell como cd dentro del script puede cambiar el directorio para los comandos posteriores, por lo que la carpeta del paquete por sí sola podría no ser suficiente para conocer el contexto completo.

3. Imprime el directorio desde el interior del script

La comprobación más clara es añadir temporalmente pwd al principio del comando del script en package.json. Por ejemplo, cambia:

"build": "node build.js"

a:

"build": "pwd && node build.js"

A continuación, ejecuta el script como de costumbre:

npm run build

La ruta impresa antes del comando de compilación es el directorio de trabajo del shell en ese momento. Este diagnóstico utiliza &&, por lo que node build.js solo se ejecuta si pwd finaliza con éxito. Después de comprobarlo, elimina el prefijo de diagnóstico y restaura el comando original. Revisa el archivo antes de guardarlo si el script original ya utiliza operadores de shell, comillas o un comando contenedor (wrapper); preserva el orden y la sintaxis previstos.

Si el script es un archivo de Node.js y puedes editarlo, otra comprobación directa es añadir temporalmente console.log(process.cwd()) cerca del inicio. Node documenta process.cwd() como el directorio de trabajo actual del proceso de Node.js. Esto reporta el directorio que Node ve cuando la línea se ejecuta; si el programa cambia más adelante su directorio de trabajo, el valor puede variar.

4. Lee el resultado y ten en cuenta los workspaces

Compara la ruta impresa con la ruta mostrada por pwd antes de ejecutar npm. Pueden ser diferentes: el directorio del script de npm es la raíz del paquete, mientras que tu directorio de Terminal es el lugar desde donde lanzaste el comando. Por ejemplo, si tu Terminal se encuentra en la raíz del repositorio pero ejecutas un script definido por un paquete bajo packages/site, el contexto del paquete del script puede ser ese workspace. npm documenta la selección de uno mediante --workspace; también puedes ejecutar un script desde el interior del directorio del workspace.

npm run build --workspace=site

Utiliza el nombre o la ruta del workspace que coincida con la configuración de workspaces del proyecto. Si la salida no es la esperada, confirma que has seleccionado el script y el workspace correctos, y luego verifica si el script contiene cd o invoca otra herramienta que cambie de directorio. Un proceso secundario (child process) también puede tener su propia configuración de directorio de trabajo; inspecciona la configuración de esa herramienta si su comportamiento difiere del script principal.

Lo que indica INIT_CWD

npm proporciona INIT_CWD para indicar el directorio en el que te encontrabas cuando invocaste npm run. Ese valor puede ser útil cuando un script necesita saber desde dónde se inició la llamada, pero no es el directorio de trabajo actual del script. Utiliza pwd dentro del script de shell o process.cwd() dentro de Node.js para inspeccionar el directorio que ve el proceso en ejecución. La distinción es especialmente útil cuando una ruta de archivo relativa funciona desde una ubicación de invocación pero no desde otra.

Para un diagnóstico rápido, comienza con la regla de la raíz del paquete de npm, selecciona el workspace previsto si es necesario e imprime pwd dentro del script para confirmar la ruta real en el punto donde se ejecuta.

Fuentes