Para passar argumentos de linha de comando para um programa Node.js ao depurá-lo em um Mac, adicione um array args à sua configuração de inicialização do VS Code. Coloque cada argumento em sua própria string e, em seguida, inicie essa configuração com F5. Isso passa os valores diretamente para o programa; não faz o zsh interpretar o array como um comando shell.

Adicione um array args ao launch.json

Abra a pasta do projeto no VS Code. Se ela ainda não tiver uma configuração de inicialização, abra a visualização Executar e Depurar com ⇧⌘D, escolha criar um arquivo launch.json e selecione o depurador para o seu ambiente de execução. O VS Code salva uma configuração do espaço de trabalho em .vscode/launch.json. Uma solicitação launch inicia um novo processo; uma solicitação attach conecta-se a um que já está em execução, portanto, use launch quando o VS Code deve iniciar o programa com seus argumentos. Configurar depuração no Visual Studio Code

Para este exemplo concreto, suponha que o espaço de trabalho contenha o arquivo app.js e que você queira executá-lo com --input seguido por um caminho de arquivo que pode conter espaços, além de uma flag --verbose. Adicione ou adapte esta configuração dentro do 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"
      ]
    }
  ]
}

Selecione Debug app with input file no seletor de configurações de Executar e Depurar e pressione F5. program identifica o ponto de entrada do JavaScript, cwd define o diretório de trabalho e args fornece os valores adicionais de linha de comando. A extensão do depurador define as propriedades compatíveis para cada ambiente de execução; consulte o IntelliSense no launch.json caso use um depurador diferente ou veja um erro de validação. Configurar depuração no Visual Studio Code

Mantenha espaços e caracteres especiais intactos

Em args no formato de array, cada elemento representa um argumento. A documentação do VS Code informa que um caminho contendo espaços permanece como uma única string após a substituição de variáveis. Portanto, o caminho de arquivo do exemplo é um único argumento; não adicione aspas de escape inseridas ao redor dele apenas para preservar o espaço. ${workspaceFolder} resolve para a pasta aberta no VS Code, o que mantém o caminho associado ao projeto. Referência de variáveis

Isso é diferente de digitar um comando no Terminal. O macOS usa o zsh como shell padrão do Terminal, mas o array args da configuração de inicialização representa argumentos enviados para o processo de destino. A sintaxe de shell, como *, > ou |, não é expandida ou executada automaticamente ali. Por exemplo, se o seu programa espera o valor literal a&b.txt, escreva-o como uma única string JSON: "a&b.txt". Para expansão ou redirecionamento de shell, o destino precisa ser executado explicitamente por meio de um shell, e o comportamento exato depende da extensão do depurador; o VS Code observa que não existe uma sintaxe universal de redirecionamento para todas as configurações de depuração. Apple: Altere o shell padrão no Terminal do Mac e Configurar depuração no Visual Studio Code

Confirme o que o programa recebe

No Node.js, o processo expõe os argumentos de inicialização por meio de process.argv. As primeiras entradas representam o executável do Node e o caminho do script; as entradas restantes são os valores adicionais. Para inspecioná-los temporariamente, adicione isto ao app.js:

console.log(process.argv);

Com a configuração de exemplo, a saída deve incluir --input, o caminho resolvido terminando em data files/input.txt e --verbose como entradas separadas. Essa é uma maneira prática de identificar se um problema está na configuração do VS Code ou no processamento de argumentos do programa. Remova ou adapte a saída de diagnóstico depois de confirmar os valores. Node.js: Process

Solicite um valor a cada depuração

Se o valor mudar entre as execuções, o VS Code oferece suporte a variáveis de entrada promptString no launch.json. Adicione um array inputs no mesmo nível superior de configurations e faça referência a essa entrada dentro de args:

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

A caixa de diálogo retorna uma string, que é substituída no elemento de argumento correspondente. Isso é útil para valores simples a cada execução. O aninhamento de variáveis de entrada não é suportado, e a solicitação de entrada não analisa uma linha de comando de shell para dividi-la em vários argumentos. Se precisar de vários valores, defina vários elementos no array ou use uma abordagem específica do depurador mais adequada. Referência de variáveis

Solucionando problemas com argumentos que parecem estar faltando

Primeiro, confirme se a configuração correta está selecionada e se a solicitação é launch. Em seguida, verifique se a lista de argumentos está na propriedade args suportada pelo depurador, se as vírgulas e aspas formam um JSON válido e se o programa espera esses valores na ordem fornecida. Verifique também o cwd: um caminho relativo é interpretado pelo programa em relação ao seu diretório de trabalho, enquanto ${workspaceFolder} fornece a raiz do projeto como ponto de partida. O VS Code recomenda verificar program, cwd, args e as propriedades suportadas pelo depurador selecionado quando uma inicialização não se comportar como o esperado. Configurar depuração no Visual Studio Code

Para uma execução de depuração repetível no Mac, armazene os argumentos na configuração de inicialização do espaço de trabalho, use um elemento de array JSON por valor pretendido e inspecione o que o seu ambiente de execução realmente recebe. Trate as aspas de shell como uma questão separada: elas se aplicam quando um shell interpreta um comando, enquanto args é uma configuração direta para o programa iniciado.

Fontes