Jak dodać zmienne środowiskowe do launch.json w VSCode

87

Praca z nowym edytorem VSCode w projekcie node.js. Próbuję skonfigurować mój profil „Launch” do debugowania, edytując plik launch.json. Muszę skonfigurować ciąg połączenia jako zmienną środowiskową. Zgodnie z komentarzami w pliku launch.json:

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

Próbowałem dodać moją zmienną środowiskową w następujący sposób:

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

Powoduje to błąd podczas próby uruchomienia mojej aplikacji; „Proces OpenDebug został nieoczekiwanie zakończony”. Nie znalazłem jeszcze żadnych plików dziennika itp., Które mogłyby wyjaśnić, na czym polega problem.

Wiem, że ta aplikacja działa poprawnie, gdy konfiguruję zmienną środowiskową i uruchamiam aplikację ze standardowego wiersza polecenia. Aplikacja działa również zgodnie z oczekiwaniami, jeśli skomentuję moją zmienną w pliku launch.json; Po prostu nie mogę połączyć się z bazą danych.

Zakładam, że używam niewłaściwego formatu w pliku launch.json, ale nie znalazłem jeszcze żadnego sposobu, aby to zadziałało.

Jakieś pomysły?

Jason Kibble
źródło

Odpowiedzi:

22

Wydaje się, że występuje problem ze zmiennymi środowiskowymi w systemie Windows (i prawdopodobnie w systemie Linux). Działa na OS X. Badamy. Spodziewaj się poprawki wkrótce.

Aktualizacja (2 czerwca 2015 r.): Visual Studio Code 0.3.0 zawiera poprawkę do tego.

Andre Weinand
źródło
92

Z powodzeniem przekazuję je korzystając z envwłaściwości w 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
źródło
2
DostałemProperty env is not allowd in launch.json
nowox
2
envzostał zmieniony na environmentw obecnych wersjach VSCode, składnia również uległa zmianie. Zobacz post @Gabriel poniżej.
burito
14

to działa

wprowadź opis obrazu tutaj

po prostu dodaj następujące elementy

"env": {"NODE_ENV": "rozwój"}

"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
źródło
2
Po wszystkich zmianach w module uruchamiającym zadania VS Code, ponieważ pierwotne pytanie ta odpowiedź powinna przesunąć się w górę listy, jest poprawna i działa!
Trevor
12

W ten sposób pod twoim systemem operacyjnym:

        "osx": {
            "MIMode": "lldb",
            "environment": [{"name": "DYLD_LIBRATY_PATH", "value": "/Users/x/boost_1_63_0/stage/lib/"}]
        },
Gabriel
źródło
Działa to również na moim w Linuksie, ale myślę, że jest to również silnie związane z typem debuggera ( cppdbgw moim przypadku)
Amfasis
Dlaczego słownik znajduje się teraz na liście?
Cees Timmerman
@CeesTimmerman, jest tak, że możesz mieć wiele zmiennych środowiskowych ... każda słownik o nazwie i wartości. Trochę rozwlekłe, ale pozwala na automatyczne uzupełnianie „nazwy” i „ścieżki”.
Robert Lugg
10

Od końca 2016 r. Możesz również korzystać z envFile projektów Node.js :

Debuger VS Code Node obsługuje teraz ładowanie zmiennych środowiskowych z pliku i przekazuje je do środowiska uruchomieniowego węzła. https://github.com/Microsoft/vscode/issues/15964

Zobacz także: Ładowanie zmiennych środowiskowych z pliku zewnętrznego (węzła) :

Aby skorzystać z tej funkcji, dodaj atrybut envFile do konfiguracji uruchamiania i określ bezwzględną ścieżkę do pliku zawierającego zmienne środowiskowe:

W przypadku projektów Asp.Net Core ta funkcja nie jest obsługiwana natywnie przez Vscode, ale została niedawno dodana do rozszerzenia Omnisharp vscode. Ta funkcja jest dostępna od 10 września 2018 r . W wersji 1.16.0 .

B12Toaster
źródło
Jest to przydatne, ale jak używać tych zmiennych w „args” dla pliku konfiguracyjnego VSCode Launch? Możesz określić "argumenty", ale nie możesz tam używać zmiennych środowiskowych (w terminalu możesz)
Jerry Green,
Chcę to zrobić "args": ["-p", "${SERVER_PORT}"]wraz z "envFile": "${workspaceFolder}/.env", ale wygląda jak "${SERVER_PORT}"nie działa
Jerry Zielony
5

Miałem ten sam problem i okazuje się, że miałem .envplik w katalogu głównym projektu, który przesłaniał launch.jsonustawienia. JESTEŚ OSTRZEŻONY. :)

CpILL
źródło
3

Dla porównania natknąłem się na podobny problem (w 2020 roku, długo po naprawieniu błędu wymienionego w zaakceptowanej odpowiedzi powyżej) dla innego języka i chciałbym coś wskazać:

Accoding do dokumentacji Microsoftu na konfiguracje startowe, wiele opcji wspólnych, w tym "env"nie są wymagane na możliwości dla wszystkich różnych debugowania / run środowiskach - to znaczy, wydaje mi się, że to nie jest kod VS że „zapewnia” opcję dla zmiennych środowiskowych, ale raczej wybór konkretnego rozszerzenia debuggera w celu zaimplementowania tej funkcji. Dlatego też

  • Nieoczekiwana awaria aplikacji do debugowania
  • ostrzeżenie Property "env" is not allowed

może wystąpić, ponieważ konkretny język / debugger, którego używasz, nie obsługuje lub nie ma zaimplementowanej obsługi zmiennych środowiskowych.

Jak powiedział qbiq, prawdopodobnie szybkim obejściem tego problemu, jeśli zmienne środowiskowe nie mają się zmieniać w kolejnych uruchomieniach, byłoby ich wyeksportowanie i uruchomienie VS Code z tym określonym zestawem zmiennych.

stellarpower
źródło
3

Wersja 1.49.1

Możesz dodać zmienne env, używając envwłaściwości w pliku launch.json lub używając envFilewłaściwości, której wartością jest lokalizacja pliku .env.

przykład env:

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

Przykład pliku env:

{
  ...
  "envFile": "${workspaceFolder}/server/.env",
  ...
}
Isaac Pak
źródło
Oba są nadal zepsute dla Pythona
garyM
1

aby obejść ten problem, możesz ustawić zmienne środowiskowe podczas uruchamiania VSCode, na przykład za pomocą tego małego skryptu 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"

Zapisz go jako vscode.ps1i wywołaj z linii poleceń, na przykład:

powershell ".\vscode.ps1 -vars @{ 'NODE_ENV'='test'; 'SOMETHING'='else' }"
qbik
źródło
1

W czerwcu 2020 r. Jest to nadal bardzo mylące i zepsute na OSX Catalina 10.15.5. Używam insiderów VSCode z rozszerzeniem CodeLLDB w wersji 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

Po uruchomieniu debuggera ze envsłowem kluczowym na launch.jsonotrzymuję to:

wprowadź opis obrazu tutaj

Krótko mówiąc, użycie "env"dyrektywy in launch.jsonspowoduje wyświetlenie komunikatu na zrzucie ekranu. Zapobiegnie to uruchomieniu debugera, zaskakującego braku funkcji, ale wystarczająco sprawiedliwego.

Ale potem, używając environmentzamiast env, nie pojawia się żaden komunikat o błędzie, ale zmienne środowiskowe nie są dostępne w debugowanym środowisku wykonawczym, więc getenv(whatever)nie zwraca rzeczywistej wartości dla tego klucza: -!

burza mózgów
źródło