Come aggiungo variabili di ambiente a launch.json in VSCode


94

Lavorare con il nuovo editor VSCode su un progetto node.js. Sto tentando di configurare il mio profilo "Launch" per il debug modificando il file launch.json. Ho bisogno di impostare una stringa di connessione come variabile di ambiente. Secondo i commenti nel file launch.json:

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

Ho provato ad aggiungere la mia variabile d'ambiente in questo modo:

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

Ciò causa un errore quando provo ad avviare la mia app; "Il processo OpenDebug è terminato in modo imprevisto". Non ho ancora trovato alcun file di registro, ecc. Che potrebbe spiegare qual è il problema.

So che questa app funziona correttamente quando imposto la variabile d'ambiente e avvio la mia app dal prompt dei comandi standard. L'app funziona come previsto anche se commento la mia variabile nel file launch.json; Non riesco a connettermi al database.

Presumo di utilizzare il formato sbagliato nel file launch.json, ma non ho ancora trovato alcun modo per farlo funzionare.

Qualche idea?

Risposte:


22

Sembra che ci sia un problema con le variabili d'ambiente su Windows (e probabilmente su Linux). Funziona su OS X. Stiamo indagando. Aspettatevi presto una soluzione.

Aggiornamento (2 giugno 2015): Visual Studio Code 0.3.0 contiene una correzione per questo.


102

Li sto passando con successo usando la envproprietà 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    
    }
  ]
}

2
HoProperty env is not allowd in launch.json
nowox

2
envè stato rinominato environmentnelle versioni correnti di VSCode, anche la sintassi è cambiata. Vedi il post di @Gabriel di seguito.
burito

15

questo sta funzionando

inserisci qui la descrizione dell'immagine

basta aggiungere quanto segue

"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"
        }
    }
]

2
Con tutte le modifiche al task runner di VS Code dalla domanda originale, questa risposta dovrebbe spostarsi in alto nell'elenco, è giusto e funziona!
Trevor

13

In questo modo, sotto il tuo sistema operativo:

        "osx": {
            "MIMode": "lldb",
            "environment": [{"name": "DYLD_LIBRATY_PATH", "value": "/Users/x/boost_1_63_0/stage/lib/"}]
        },

Funziona anche per il mio su Linux, ma penso che sia anche fortemente correlato al tipo di debugger ( cppdbgnel mio caso)
Amfasis

Perché adesso il dizionario è in un elenco?
Cees Timmerman

@CeesTimmerman, è così che puoi avere più variabili d'ambiente ... ciascuna un dizionario di un nome e un valore. Un po 'prolisso ma consente il completamento automatico di "nome" e "percorso".
Robert Lugg

12

Dalla fine del 2016 puoi anche utilizzare i envFile progetti per Node.js :

Il debugger di VS Code Node ora supporta il caricamento delle variabili di ambiente da un file e le passa al runtime del nodo. https://github.com/Microsoft/vscode/issues/15964

Vedi anche: Carica variabili d'ambiente da file esterno (nodo) :

Per utilizzare questa funzionalità, aggiungi un attributo envFile alla configurazione di avvio e specifica il percorso assoluto del file contenente le variabili di ambiente:

Per i progetti Asp.Net Core , questa funzionalità non è supportata in modo nativo da vscode ma è stata recentemente aggiunta all'estensione omnisharp vscode. Questa funzione è disponibile dal 10 settembre 2018 tramite la v1.16.0 .


Questo è utile, ma come usare queste variabili in "args" per il file di configurazione di VSCode Launch? Puoi specificare "args" ma non puoi usare le variabili d'ambiente lì (nel terminale puoi)
Jerry Green

Voglio fare "args": ["-p", "${SERVER_PORT}"]insieme "envFile": "${workspaceFolder}/.env", ma sembra "${SERVER_PORT}"che non funzioni
Jerry Green

7

Ho avuto lo stesso problema e si è scoperto che avevo un .envfile nella radice del mio progetto che sovrascriveva le launch.jsonimpostazioni. SEI AVVISATO. :)


3

Per riferimento, mi sono imbattuto in un problema simile (nel 2020, molto tempo dopo che il bug menzionato nella risposta accettata sopra è stato risolto) per una lingua diversa e vorrei sottolineare qualcosa:

Accoding alla documentazione Microsoft su configurazioni di lancio, molte opzioni comuni, tra cui "env"non sono requried funzionalità per tutti i diversi debug / ambienti Run - vale a dire, mi pare che non sia codice VS che 'prevede' l'opzione per le variabili d'ambiente, ma piuttosto, la scelta dell'estensione specifica del debugger per implementare questa funzionalità. Quindi neanche

  • Un arresto anomalo imprevisto dell'applicazione di debug
  • L'avviso Property "env" is not allowed

può verificarsi perché il particolare linguaggio / debugger che stai utilizzando non supporta o non ha implementato la gestione delle variabili di ambiente.

Come ha detto qbiq, probabilmente una soluzione rapida per questo se le variabili di ambiente non cambieranno tra i lanci sarebbe esportarle ed eseguire VS Code con questo set specifico di variabili.


3

Versione 1.49.1

È possibile aggiungere variabili env utilizzando la envproprietà nel file launch.json o utilizzando ilenvFile proprietà con il valore come posizione del file .env.

esempio env:

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

envFile esempio:

{
  ...
  "envFile": "${workspaceFolder}/server/.env",
  ...
}

Entrambi sono ancora non funzionanti per python
garyM

2

A giugno 2020 questo è ancora molto fuorviante e non funzionante su OSX Catalina 10.15.5. Sto usando gli addetti ai lavori VSCode con l'estensione CodeLLDB versione 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

Quando avvio il debugger con la envparola chiave launch.jsonattivata, ottengo questo:

inserisci qui la descrizione dell'immagine

Quindi, in poche parole, usando la "env"direttiva inlaunch.json mostrerà il messaggio nello screenshot. Ciò impedirà l'esecuzione del debugger, sorprendente funzionalità mancante, ma abbastanza corretta.

Ma poi, usando al environmentposto di env, non viene visualizzato alcun messaggio di errore ma le variabili di ambiente non sono disponibili sul runtime in fase di debug, quindi getenv(whatever)non restituisce il valore effettivo per quella chiave: -!


1

come soluzione alternativa, puoi impostare le variabili di ambiente all'avvio di VSCode, ad esempio, utilizzando questo piccolo script 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"

Salvalo come vscode.ps1e chiamalo dalla riga di comando, in questo modo:

powershell ".\vscode.ps1 -vars @{ 'NODE_ENV'='test'; 'SOMETHING'='else' }"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.