Wie füge ich umgebungsvariablen zu launch.json in VSCode hinzu?

87

Arbeiten mit dem neuen VSCode-Editor in einem node.js-Projekt. Ich versuche, mein "Launch" -Profil für das Debuggen zu konfigurieren, indem ich die Datei launch.json bearbeite. Ich muss einen Verbindungsstring als Umgebungsvariable einrichten. Laut den Kommentaren in der Datei launch.json:

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

Ich habe versucht, meine Umgebungsvariable wie folgt hinzuzufügen:

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

Dies führt zu einem Fehler, wenn ich versuche, meine App zu starten. "Der OpenDebug-Prozess wurde unerwartet beendet". Ich habe noch keine Protokolldateien usw. gefunden, die das Problem erklären könnten.

Ich weiß, dass diese App ordnungsgemäß funktioniert, wenn ich die Umgebungsvariable einrichte und meine App über die Standard-Eingabeaufforderung starte. Die App wird auch wie erwartet ausgeführt, wenn ich meine Variable in der Datei launch.json auskommentiere. Ich kann einfach keine Verbindung zur Datenbank herstellen.

Ich gehe davon aus, dass ich das falsche Format in der Datei launch.json verwende, habe aber noch keine Möglichkeit gefunden, dies zum Laufen zu bringen.

Irgendwelche Ideen?

Jason Kibble
quelle

Antworten:

22

Es scheint ein Problem mit Umgebungsvariablen unter Windows (und wahrscheinlich unter Linux) zu geben. Es funktioniert unter OS X. Wir untersuchen. Erwarten Sie bald eine Lösung.

Update (2. Juni 2015): Visual Studio Code 0.3.0 enthält ein Update dafür.

Andre Weinand
quelle
92

Ich übergebe sie erfolgreich mit der envEigenschaft in 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
quelle
2
Ich habeProperty env is not allowd in launch.json
nowox
2
envwurde environmentin aktuellen Versionen von VSCode umbenannt, die Syntax wurde ebenfalls geändert. Siehe den Beitrag von @Gabriel unten.
Burito
14

das funktioniert

Geben Sie hier die Bildbeschreibung ein

Fügen Sie einfach Folgendes hinzu

"env": {"NODE_ENV": "development"}

"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
quelle
2
Mit all den Änderungen am VS Code Task Runner seit der ursprünglichen Frage sollte diese Antwort ganz oben auf der Liste stehen. Sie ist richtig und funktioniert!
Trevor
12

So unter Ihrem Betriebssystem:

        "osx": {
            "MIMode": "lldb",
            "environment": [{"name": "DYLD_LIBRATY_PATH", "value": "/Users/x/boost_1_63_0/stage/lib/"}]
        },
Gabriel
quelle
Dies funktioniert auch unter Linux, aber ich denke, es hängt auch stark mit der Art des Debuggers zusammen ( cppdbgin meinem Fall)
Amfasis
Warum ist das Wörterbuch jetzt in einer Liste?
Cees Timmerman
@CeesTimmerman, es ist so, dass Sie mehrere Umgebungsvariablen haben können ... jede ein Wörterbuch mit einem Namen und einem Wert. Ein bisschen ausführlich, aber es erlaubt die automatische Vervollständigung von 'Name' und 'Pfad'.
Robert Lugg
10

Seit Ende 2016 können Sie auch die envFile für Node.js-Projekte verwenden :

Der VS Code Node-Debugger unterstützt jetzt das Laden von Umgebungsvariablen aus einer Datei und übergibt sie an die Laufzeit des Knotens. https://github.com/Microsoft/vscode/issues/15964

Siehe auch: Umgebungsvariablen aus externer Datei (Knoten) laden :

Um diese Funktion zu verwenden, fügen Sie Ihrer Startkonfiguration ein Attribut envFile hinzu und geben Sie den absoluten Pfad zu der Datei an, die die Umgebungsvariablen enthält:

Bei Asp.Net Core-Projekten wird diese Funktion von vscode nicht nativ unterstützt, wurde jedoch kürzlich zur omnisharp vscode-Erweiterung hinzugefügt. Diese Funktion ist seit dem 10. September 2018 über Version 1.16.0 verfügbar .

B12Toaster
quelle
Dies ist praktisch, aber wie werden diese Variablen in "args" für die VSCode Launch-Konfigurationsdatei verwendet? Sie können "args" angeben, aber Sie können dort keine Umgebungsvariablen verwenden (im Terminal können Sie)
Jerry Green
Ich tun möchte , "args": ["-p", "${SERVER_PORT}"]zusammen mit "envFile": "${workspaceFolder}/.env", aber sieht aus wie "${SERVER_PORT}"nicht funktioniert
Jerry Grün
5

Ich hatte das gleiche Problem und es stellte sich heraus, dass ich eine .envDatei in meinem Projektstamm hatte, die die launch.jsonEinstellungen überschrieb . Sie werden gewarnt. :) :)

CpILL
quelle
3

Als Referenz stieß ich auf ein ähnliches Problem (im Jahr 2020, lange nachdem der in der oben akzeptierten Antwort erwähnte Fehler behoben wurde) für eine andere Sprache und möchte auf Folgendes hinweisen:

Gemäß der Dokumentation von Microsoft zu Startkonfigurationen sind viele gängige Optionen, einschließlich "env"nicht erforderlicher Funktionen, für alle verschiedenen Debugging- / Ausführungsumgebungen erforderlich. Das heißt, es scheint mir, dass nicht VS-Code die Option für Umgebungsvariablen "bereitstellt". sondern die Wahl der spezifischen Debugger-Erweiterung, um diese Funktion zu implementieren. Daher auch nicht

  • Ein unerwarteter Absturz der Debugging-Anwendung
  • die Warnung Property "env" is not allowed

Dies kann auftreten, weil die von Ihnen verwendete Sprache / der Debugger die Behandlung von Umgebungsvariablen nicht unterstützt oder nicht implementiert hat.

Wie qbiq bereits sagte, besteht eine schnelle Lösung für dieses Problem, wenn sich die Umgebungsvariablen bei den Starts nicht ändern, darin, sie zu exportieren und VS-Code mit diesem bestimmten Satz von Variablen auszuführen.

Sternkraft
quelle
3

Version 1.49.1

Sie können env-Variablen hinzufügen, indem Sie die envEigenschaft in Ihrer Datei launch.json oder die envFileEigenschaft verwenden, wobei der Wert der Speicherort Ihrer ENV-Datei ist.

env Beispiel:

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

Beispiel für envFile:

{
  ...
  "envFile": "${workspaceFolder}/server/.env",
  ...
}
Isaac Pak
quelle
Beide sind noch für Python gebrochen
garyM
1

Um dieses Problem zu umgehen, können Sie beim Starten von VSCode Umgebungsvariablen festlegen, z. B. mithilfe dieses kleinen Powershell-Skripts:

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"

Speichern Sie es als vscode.ps1und rufen Sie es über die Befehlszeile auf:

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

Im Juni 2020 ist dies unter OSX Catalina 10.15.5 immer noch sehr irreführend und fehlerhaft. Ich verwende VSCode-Insider mit der CodeLLDB-Erweiterung Version 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

Beim Starten des Debuggers mit dem envSchlüsselwort on wird launch.jsonFolgendes angezeigt:

Geben Sie hier die Bildbeschreibung ein

Kurz gesagt, wenn Sie die "env"Direktive in verwenden, launch.jsonwird die Meldung im Screenshot angezeigt. Dies verhindert, dass der Debugger ausgeführt wird, was überraschenderweise keine Funktion bietet, aber fair genug ist.

Bei Verwendung von environmentanstelle von envwird jedoch keine Fehlermeldung angezeigt, aber die Umgebungsvariablen sind zum Debuggen der Laufzeit nicht verfügbar, sodass getenv(whatever)der tatsächliche Wert für diesen Schlüssel nicht zurückgegeben wird: -!

Brainstorming
quelle