Para pasar argumentos de línea de comandos a un programa de Node.js al depurarlo en un Mac, añade un array args a su configuración de inicio de VS Code. Coloca cada argumento en su propia cadena y luego inicia esa configuración con F5. Esto pasa los valores directamente al programa; no hace que zsh interprete el array como un comando de shell.

Añade un array args a launch.json

Abre la carpeta del proyecto en VS Code. Si aún no tiene una configuración de inicio, abre Ejecutar y depurar con ⇧⌘D, elige crear un archivo launch.json y selecciona el depurador para tu entorno de ejecución. VS Code guarda una configuración de espacio de trabajo en .vscode/launch.json. Una solicitud launch inicia un nuevo proceso; una solicitud attach se conecta a uno que ya se está ejecutando, por lo que debes usar launch cuando VS Code deba iniciar el programa con tus argumentos. Configure debugging in Visual Studio Code

Para este ejemplo concreto, supongamos que el espacio de trabajo contiene app.js y deseas ejecutarlo con --input seguido de una ruta de archivo que puede incluir espacios, además de un indicador --verbose. Añade o adapta esta configuración dentro del array configurations:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Debug app with input file",
      "program": "${workspaceFolder}/app.js",
      "cwd": "${workspaceFolder}",
      "args": [
        "--input",
        "${workspaceFolder}/data files/input.txt",
        "--verbose"
      ]
    }
  ]
}

Elige Debug app with input file en el selector de configuración de Ejecutar y depurar, y luego presiona F5. program identifica el punto de entrada de JavaScript, cwd establece el directorio de trabajo y args suministra los valores adicionales de la línea de comandos. La extensión del depurador define las propiedades compatibles para cada entorno de ejecución; consulta IntelliSense en launch.json si estás usando un depurador diferente o ves un error de validación. Configure debugging in Visual Studio Code

Mantén intactos los espacios y los caracteres especiales

En args con valores de tipo array, cada elemento es un argumento. VS Code documenta que una ruta que contiene espacios permanece como una sola cadena tras la sustitución de variables. Por lo tanto, la ruta de archivo del ejemplo es un único argumento; no agregues comillas escapadas integradas a su alrededor solo para preservar el espacio. ${workspaceFolder} se resuelve en la carpeta abierta en VS Code, lo que mantiene la ruta vinculada al proyecto. Variables reference

Esto es diferente de escribir un comando en la Terminal. macOS usa zsh como el shell predeterminado de Terminal, pero el array args de la configuración de inicio representa argumentos para el proceso de destino. La sintaxis de shell como *, > o | no se expande ni se ejecuta automáticamente allí. Por ejemplo, si tu programa espera el valor literal a&b.txt, escríbelo como una única cadena JSON: "a&b.txt". Para la expansión o redirección de shell, el destino debe ejecutarse explícitamente a través de un shell, y el comportamiento exacto depende de la extensión del depurador; VS Code señala que no existe una sintaxis de redirección universal para todas las configuraciones de depuración. Apple: Change the default shell in Terminal on Mac y Configure debugging in Visual Studio Code

Confirma lo que recibe el programa

Para Node.js, el proceso expone los argumentos de inicio a través de process.argv. Las primeras entradas representan el ejecutable de Node y la ruta del script; las entradas restantes son los valores adicionales. Para inspeccionarlos temporalmente, añade esto a app.js:

console.log(process.argv);

Con la configuración de ejemplo, la salida debería incluir --input, la ruta resuelta que termina en data files/input.txt y --verbose como entradas separadas. Esta es una forma práctica de saber si un problema está en la configuración de VS Code o en el análisis de argumentos del programa. Elimina o adapta la salida de diagnóstico una vez que hayas confirmado los valores. Node.js: Process

Solicitar un valor cada vez que depures

Si el valor cambia entre ejecuciones, VS Code admite variables de entrada promptString en launch.json. Añade un array inputs al mismo nivel superior que configurations, y luego haz referencia a esa entrada dentro de args:

"args": ["--input", "${input:inputFile}"],
"inputs": [
  {
    "id": "inputFile",
    "type": "promptString",
    "description": "Path to the input file",
    "default": "data files/input.txt"
  }
]

El aviso devuelve una cadena, que se sustituye en el elemento del argumento. Esto es útil para un valor simple por ejecución. El anidamiento de variables de entrada no es compatible y el cuadro de diálogo de entrada no analiza una línea de comandos de shell en múltiples argumentos. Si necesitas varios valores, define varios elementos de array o utiliza un enfoque más adecuado y específico del depurador. Variables reference

Solución de problemas con argumentos que parecen faltar

Primero confirma que esté seleccionada la configuración correcta y que la solicitud sea launch. Luego, comprueba que la lista de argumentos esté en la propiedad args admitida por el depurador, que sus comas y comillas formen un JSON válido y que tu programa espere esos valores en el orden suministrado. Verifica también cwd: el programa interpreta una ruta relativa en relación con su directorio de trabajo, mientras que ${workspaceFolder} proporciona un punto de partida desde la raíz del proyecto. VS Code recomienda verificar program, cwd, args y las propiedades compatibles del depurador seleccionado cuando un inicio no se comporta como se espera. Configure debugging in Visual Studio Code

Para una ejecución de depuración reproducible en Mac, almacena los argumentos en la configuración de inicio del espacio de trabajo, usa un elemento de array JSON por cada valor previsto e inspecciona lo que realmente recibe tu entorno de ejecución. Trata el entrecomillado de shell como un asunto aparte: se aplica cuando un shell analiza un comando, mientras que args es la configuración para el programa iniciado.

Fuentes