Como adiciono variáveis ​​de ambiente ao launch.json no VSCode

86

Trabalhar com o novo editor VSCode em um projeto node.js. Estou tentando configurar meu perfil "Launch" para depuração editando o arquivo launch.json. Eu preciso configurar um connectionstring como uma variável de ambiente. De acordo com os comentários no arquivo launch.json:

// Environment variables passed to the program.
"env": { }

Eu tentei adicionar minha variável de ambiente assim:

"env":
{
"CONNECTION_STRING": "Data Source=server;Initial Catalog=catalog;User ID=uid;Password=pwd;MultipleActiveResultSets=true"
}

Isso causa um erro quando tento iniciar meu aplicativo; "O processo OpenDebug terminou inesperadamente". Ainda não encontrei nenhum arquivo de log etc. que possa explicar qual é o problema.

Sei que este aplicativo funciona corretamente quando configuro a variável de ambiente e inicio meu aplicativo a partir do prompt de comando padrão. O aplicativo também funciona conforme o esperado se eu comentar minha variável no arquivo launch.json; Simplesmente não consigo me conectar ao banco de dados.

Presumo que estou usando o formato errado no arquivo launch.json, mas ainda não encontrei nenhuma maneira de fazer isso funcionar.

Alguma ideia?

Jason Kibble
fonte

Respostas:

22

Parece haver um problema com as variáveis ​​de ambiente no Windows (e provavelmente no Linux). Ele funciona no OS X. Estamos investigando. Espere uma correção em breve.

Atualização (2 de junho de 2015): Visual Studio Code 0.3.0 contém uma correção para isso.

Andre Weinand
fonte
91

Estou transmitindo-os com sucesso usando a envpropriedade em launch.json:

{
  "version": "0.2.0",
  "configurations": [
    {
    "type": "node",
    "request": "launch",
    "name": "SLS Webpack",
    "protocol": "legacy",
    "program": "${workspaceRoot}/node_modules/.bin/sls",
    "cwd": "${workspaceRoot}",
    "args": ["webpack", "watch", "-f", "${fileBasenameNoExtension}", "-p", "${fileDirname}/event.json"],
    "env": {"AWS_REGION":"us-east-1", "SLS_DEBUG":"*"},
    "outFiles": ["${cwd}/dist/**/*.js"],
    "sourceMaps": true,
    "smartStep": true    
    }
  ]
}
btburton42
fonte
2
Eu tenhoProperty env is not allowd in launch.json
agora em
2
envfoi renomeado para environmentnas versões atuais do VSCode, a sintaxe também foi alterada. Veja a postagem do @Gabriel abaixo.
burito
14

isso está funcionando

insira a descrição da imagem aqui

apenas adicione o seguinte

"env": {"NODE_ENV": "desenvolvimento"}

"configurations": [
    {
        "type": "node",
        "request": "launch",
        "name": "Launch Program", //TODO: cmd as launch program
        "skipFiles": [
            "<node_internals>/**"
        ],
        "program": "${workspaceFolder}\\index.js",
        "env": {
            "NODE_ENV": "development"
        }
    }
]
Aljohn Yamaro
fonte
2
Com todas as mudanças no executor de tarefas do VS Code desde a pergunta original, essa resposta deve subir na lista, está certa e funciona!
Trevor
12

Assim, no seu sistema operacional:

        "osx": {
            "MIMode": "lldb",
            "environment": [{"name": "DYLD_LIBRATY_PATH", "value": "/Users/x/boost_1_63_0/stage/lib/"}]
        },
Gabriel
fonte
Isso também funciona para mim no Linux, mas acho que também está fortemente relacionado ao tipo de depurador ( cppdbgno meu caso)
Amfasis
Por que o dicionário está em uma lista agora?
Cees Timmerman
@CeesTimmerman, é para que você possa ter múltiplas variáveis ​​de ambiente ... cada uma um dicionário de um nome e valor. Um pouco prolixo, mas permite o preenchimento automático de 'nome' e 'caminho'.
Robert Lugg
10

Desde o final de 2016, você também pode usar o envFile para projetos Node.js :

O depurador do VS Code Node agora oferece suporte para carregar variáveis ​​de ambiente de um arquivo e as passa para o tempo de execução do nó. https://github.com/Microsoft/vscode/issues/15964

Veja também: Carregar variáveis ​​de ambiente de arquivo externo (nó) :

Para usar este recurso, adicione um atributo envFile à configuração de inicialização e especifique o caminho absoluto para o arquivo que contém as variáveis ​​de ambiente:

Para projetos Asp.Net Core , esse recurso não é suportado nativamente pelo vscode, mas foi recentemente adicionado à extensão omnisharp vscode. Este recurso está disponível desde 10 de setembro de 2018 via v1.16.0 .

B12Toaster
fonte
Isso é útil, mas como usar essas variáveis ​​em "args" para o arquivo de configuração de inicialização do VSCode? Você pode especificar "args", mas você não pode usar variáveis ​​de ambiente lá (no terminal você pode)
Jerry Green
Eu quero fazer "args": ["-p", "${SERVER_PORT}"]junto com "envFile": "${workspaceFolder}/.env", mas parece "${SERVER_PORT}"que não funciona
Jerry Green
5

Eu tive o mesmo problema e descobri que tinha um .envarquivo na raiz do meu projeto que estava substituindo as launch.jsonconfigurações. VOCÊ ESTÁ AVISADO. :)

CpILL
fonte
3

Para referência, me deparei com um problema semelhante (em 2020, muito depois que o bug mencionado na resposta aceita acima foi corrigido) para um idioma diferente e gostaria de apontar algo:

De acordo com a documentação da Microsoft sobre configurações de inicialização, muitas opções comuns, incluindo recursos "env"não exigidos para todos os diferentes ambientes de depuração / execução - isto é, parece-me que não é o VS Code que 'fornece' a opção para variáveis ​​de ambiente, mas sim, a escolha da extensão do depurador específica para implementar este recurso. Portanto, qualquer um

  • Uma falha inesperada do aplicativo de depuração
  • O aviso Property "env" is not allowed

pode ocorrer porque o idioma / depurador específico que você está usando não oferece suporte ou não implementou o tratamento de variáveis ​​de ambiente.

Como qbiq disse, provavelmente uma solução rápida para isso, se as variáveis ​​de ambiente não mudarem entre as inicializações, seria exportá-las e executar o VS Code com este conjunto específico de variáveis.

força estelar
fonte
3

Versão 1.49.1

Você pode adicionar variáveis ​​env usando a envpropriedade em seu arquivo launch.json ou usando a envFilepropriedade com o valor sendo a localização de seu arquivo .env.

exemplo env:

{
  ...
   "env": { "PORT": "4000" }
  ...
}

Exemplo de envFile:

{
  ...
  "envFile": "${workspaceFolder}/server/.env",
  ...
}
Isaac Pak
fonte
Ambos ainda estão quebrados para python
garyM
1

como solução alternativa, você pode definir variáveis ​​de ambiente ao iniciar o VSCode, por exemplo, usando este pequeno script do PowerShell:

param(
 $vars = @{}
)

$vars.Keys | % {
    write-host "adding env variable: $_=$($vars[$_])"
    [Environment]::SetEnvironmentVariable($_, $vars[$_], "Process")
}
$ver = "0.1.0"
& "$env:LOCALAPPDATA\Code\app-$ver\Code.exe"

Salve-o como vscode.ps1e chame-o da linha de comando, assim:

powershell ".\vscode.ps1 -vars @{ 'NODE_ENV'='test'; 'SOMETHING'='else' }"
qbik
fonte
1

Em junho de 2020, isso ainda era muito enganoso e quebrado no OSX Catalina 10.15.5. Estou usando insiders VSCode com a extensão CodeLLDB versão 1.5.3 :

Version: 1.47.0-insider
Commit: 0913b1aa43191d8af0ccb4a133d9a8d7c1a81d69
Date: 2020-06-23T09:38:28.751Z (1 day ago)
Electron: 8.3.3
Chrome: 80.0.3987.165
Node.js: 12.13.0
V8: 8.0.426.27-electron.0
OS: Darwin x64 19.5.0

Ao iniciar o depurador com a envpalavra-chave em launch.json, recebo o seguinte:

insira a descrição da imagem aqui

Portanto, em poucas palavras, usar a "env"diretiva em launch.jsonmostrará a mensagem na imagem. Isso impedirá a execução do depurador, recurso surpreendente em falta, mas justo o suficiente.

Mas então, usando em environmentvez de env, não há mensagem de erro aparecendo, mas as variáveis ​​de ambiente não estão disponíveis no tempo de execução sendo depurado, portanto getenv(whatever), não retorna o valor real para aquela chave: -!

chuva de ideias
fonte