Watch at EaseHistorias. Respuestas. Perspectiva.

Tecnología · GUÍA PRÁCTICA

npm ENOENT: comprueba la ruta de package.json antes de crear otro archivo

Conserva la ruta exacta y el directorio del llamador; separa un archivo ausente del checkout de una raíz, workspace o lanzador equivocados. Un manifiesto vacío no repara el proyecto.

Ilustración original: Conserva la ruta ausente exacta, el llamador, los manifiestos y el objetivo antes de verificar el flujo original. Es un diagrama explicativo, no un registro de un cliente.
Ilustración original: Conserva la ruta ausente exacta, el llamador, los manifiestos y el objetivo antes de verificar el flujo original. Es un diagrama explicativo, no un registro de un cliente. Watch at Ease

Si npm informa ENOENT para package.json, conserva primero la ruta que intentó abrir. Un componente ausente puede deberse al directorio equivocado, un checkout incompleto u otro paquete seleccionado. El mensaje no decide por sí solo la reparación.

Nuestros controles aislados con Node v24.19.0/npm 11.9.0 distinguieron scripts raíz y workspace, un manifiesto versionado ausente y otro vacío sin relación. Pasaron diez comprobaciones. Ilustran una auditoría basada en rutas; no reproducen el problema histórico de Windows --prefix ni demuestran que una instalación o compilación CI vaya a pasar.

Conserva la ruta fallida y el llamador

Antes de editar, copia code, syscall, path y el comando completo. Registra el directorio inicial del llamador, versiones Node/npm y la tarea IDE, etapa CI o servicio que inicia npm. Conserva unidades, rutas del contenedor y contexto de enlaces simbólicos; oculta datos privados solo en una copia para compartir.

Compara el registro con el repositorio y paquete previstos. El directorio del script npm puede diferir del inicial: nuestro control con prefix explícito ejecutó el script en el paquete raíz mientras INIT_CWD conservaba el directorio padre. Por tanto, el cwd del script no reconstruye por sí solo dónde empezó el comando.

Localiza manifiestos antes de crear uno

Desde la raíz conocida, compara los package.json versionados, el commit elegido y los archivos reales con la ruta del error. En Git, git ls-files -- package.json ':(glob)**/package.json' enumera rutas versionadas raíz y anidadas; ejecútalo desde esa raíz. Una ruta listada prueba una entrada del índice, no que el archivo exista ahora o tenga los bytes esperados.

Si el checkout o artefacto previsto debe contener el manifiesto, conserva cambios locales y restaura el archivo mediante el proceso habitual del proyecto. No ejecutes npm init solo para silenciar este incidente. En nuestro control, Git seguía listando package.json tras quitar su copia de trabajo; restaurar los bytes originales permitió ejecutar el script previsto.

Elige la raíz o un workspace real

Lee workspaces en el manifiesto raíz y los manifiestos hijos pertinentes. El selector admite un nombre de paquete declarado o una ruta; el último segmento de carpeta no es necesariamente el nombre del paquete. La guía npm v11 documenta que iniciar dentro de un workspace selecciona su contexto y fija prefix a la raíz del workspace.

Nuestra raíz declaraba packages/a, pero el hijo se llamaba fixture-a. npm run probe --workspace=fixture-a seleccionó el script hijo, igual que ejecutar probe dentro del hijo. El selector supuesto --workspace=a produjo No workspaces found, no ENOENT. Conserva ese nuevo error como otra rama en vez de forzarlo al diagnóstico de archivo ausente.

Compara rutas de invocación y versiones

Usa una reproducción pequeña y autorizada para comparar el lanzador original con entrar al paquete verificado, un selector workspace explícito o la ruta prefix original. Imprime directorios inicial y efectivo, y conserva el manifiesto resuelto si la herramienta lo expone. Cambia una ruta cada vez, sin reiniciar cachés ni sustituir el manifiesto durante la comparación.

El issue público npm7722 registra fallos Windows --prefix install en versiones antiguas concretas y reportes de alternativas con cd o ci. Cerrarlo como not planned no certifica que todas las versiones afectadas estén corregidas. Nuestro --prefix project run probe pasó en Linux/npm11.9.0, pero fue un script de control, no Windows npm install, resolución de dependencias ni una prueba de regresión de producción.

Repara la causa demostrada

Directorio equivocado: selecciona el paquete previsto. Archivo versionado ausente: repara checkout o artefacto. Cwd del lanzador incorrecto: fija el directorio de esa tarea. Selector workspace incorrecto: usa nombre o ruta verificados. Un problema dependiente de versión requiere reproducción mínima y una decisión acotada de versión o alternativa, no aplicar un reporte antiguo a todo ENOENT.

Tanto el directorio vacío como el manifiesto versionado ausente fallaron con la ruta exacta de package.json. Poner {} en el directorio vacío hizo legible esa ruta, pero produjo Missing script: probe; no recuperó scripts ni dependencias. Eliminar un mensaje de error es una prueba más débil que recuperar el proyecto previsto.

Exige que pase el flujo original

Vuelve al lanzador original y repite install, ci o el script original con las versiones y workspace previstos. Conserva directorio del llamador, identidad del manifiesto, estado de salida y resultado esperado o comprobaciones del proyecto. Un comando distinto que termina correctamente sirve como comparación, no como cierre automático del flujo fallido.

Las diez comprobaciones usaron solo nuevos controles locales en Linux, Node v24.19.0 y npm11.9.0. Ejecutaron scripts probe controlados y comprobaciones de archivos versionados, sin instalar dependencias ni acceder a la red. No reprodujeron Windows, IDE, servicio CI, repositorio privado ni la regresión histórica --prefix. La documentación npm v11 enlazada está marcada Legacy; es una rama versionada, no una afirmación sobre el CLI más reciente.

Ilustración original: Directorio equivocado, checkout incompleto, objetivo workspace y regresión reproducida requieren pruebas y acciones distintas; el mensaje no elige una por sí solo.
Ilustración original: Directorio equivocado, checkout incompleto, objetivo workspace y regresión reproducida requieren pruebas y acciones distintas; el mensaje no elige una por sí solo. Watch at Ease