Comment ajouter des variables d'environnement à launch.json dans VSCode

87

Utilisation du nouvel éditeur VSCode sur un projet node.js. J'essaye de configurer mon profil "Launch" pour le débogage en éditant le fichier launch.json. J'ai besoin de configurer une chaîne de connexion en tant que variable d'environnement. Selon les commentaires dans le fichier launch.json:

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

J'ai essayé d'ajouter ma variable d'environnement comme ceci:

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

Cela provoque une erreur lorsque j'essaye de lancer mon application; "Le processus OpenDebug s'est terminé de manière inattendue". Je n'ai pas encore trouvé de fichiers journaux, etc. qui pourraient expliquer le problème.

Je sais que cette application fonctionne correctement lorsque je configure la variable d'environnement et lance mon application à partir de l'invite de commande standard. L'application fonctionne également comme prévu si je commente ma variable dans le fichier launch.json; Je ne peux tout simplement pas me connecter à la base de données.

Je suppose que j'utilise le mauvais format dans le fichier launch.json, mais je n'ai encore trouvé aucun moyen de faire fonctionner cela.

Des idées?

Jason Kibble
la source

Réponses:

22

Il semble y avoir un problème avec les variables d'environnement sous Windows (et probablement sous Linux). Cela fonctionne sous OS X. Nous enquêtons. Attendez-vous à un correctif bientôt.

Mise à jour (2 juin 2015): Visual Studio Code 0.3.0 contient un correctif pour cela.

André Weinand
la source
92

Je les transmets avec succès en utilisant la envpropriété dans 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
la source
2
J'aiProperty env is not allowd in launch.json
nowox le
2
enva été renommé en environmentdans les versions actuelles de VSCode, la syntaxe est également modifiée. Voir le post de @Gabriel ci-dessous.
burito
14

cela fonctionne

entrez la description de l'image ici

ajoutez simplement ce qui suit

"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
la source
2
Avec tous les changements apportés au lanceur de tâches VS Code depuis la question d'origine, cette réponse devrait remonter dans la liste, c'est vrai et cela fonctionne!
Trevor le
12

Comme ça, sous votre OS:

        "osx": {
            "MIMode": "lldb",
            "environment": [{"name": "DYLD_LIBRATY_PATH", "value": "/Users/x/boost_1_63_0/stage/lib/"}]
        },
Gabriel
la source
Cela fonctionne également pour mon Linux, mais je pense que c'est aussi fortement lié au type de débogueur ( cppdbgdans mon cas)
Amfasis
Pourquoi le dictionnaire est-il maintenant dans une liste?
Cees Timmerman
@CeesTimmerman, c'est ainsi que vous pouvez avoir plusieurs variables d'environnement ... chacune un dictionnaire d'un nom et d'une valeur. Un peu verbeux mais cela permet l'auto-complétion de «nom» et «chemin».
Robert Lugg
10

Depuis fin 2016, vous pouvez également utiliser les envFile projets pour Node.js :

Le débogueur VS Code Node prend désormais en charge le chargement des variables d'environnement à partir d'un fichier et les transmet à l'exécution du nœud. https://github.com/Microsoft/vscode/issues/15964

Voir aussi: Charger les variables d'environnement à partir d'un fichier externe (nœud) :

Pour utiliser cette fonctionnalité, ajoutez un attribut envFile à votre configuration de lancement et spécifiez le chemin absolu vers le fichier contenant les variables d'environnement:

Pour les projets Asp.Net Core , cette fonctionnalité n'est pas prise en charge nativement par vscode, mais elle a récemment été ajoutée à l'extension vscode omnisharp. Cette fonctionnalité est disponible depuis le 10 septembre 2018 via la v1.16.0 .

B12Toaster
la source
C'est pratique mais comment utiliser ces variables dans "args" pour le fichier de configuration VSCode Launch? Vous pouvez spécifier "args" mais vous ne pouvez pas utiliser de variables d'environnement ici (dans le terminal, vous pouvez)
Jerry Green
Je veux faire "args": ["-p", "${SERVER_PORT}"]avec "envFile": "${workspaceFolder}/.env", mais on dirait que "${SERVER_PORT}"ça ne marche pas
Jerry Green
5

J'ai eu ce même problème et il s'avère que j'avais un .envfichier dans la racine de mon projet qui remplaçait les launch.jsonparamètres. VOUS ÊTES AVERTI. :)

CpILL
la source
3

Pour référence, je suis tombé sur un problème similaire (en 2020, longtemps après la correction du bogue mentionné dans la réponse acceptée ci-dessus) pour une langue différente et je voudrais souligner quelque chose:

Selon la documentation de Microsoft sur les configurations de lancement, de nombreuses options courantes, y compris des fonctionnalités "env"non requises pour tous les différents environnements de débogage / d'exécution - c'est-à-dire qu'il me semble que ce n'est pas VS Code qui `` fournit '' l'option pour les variables d'environnement, mais plutôt le choix de l'extension de débogueur spécifique pour implémenter cette fonctionnalité. Par conséquent, soit

  • Un crash inattendu de l'application de débogage
  • l'avertissement Property "env" is not allowed

peut se produire parce que le langage / débogueur particulier que vous utilisez ne prend pas en charge ou n'a pas implémenté la gestion des variables d'environnement.

Comme qbiq l'a dit, une solution de contournement rapide pour cela si les variables d'environnement ne vont pas changer à travers les lancements serait de les exporter et d'exécuter VS Code avec cet ensemble spécifique de variables.

puissance stellaire
la source
3

Version 1.49.1

Vous pouvez ajouter des variables env en utilisant la envpropriété dans votre fichier launch.json ou en utilisant la envFilepropriété avec la valeur correspondant à l'emplacement de votre fichier .env.

exemple d'env:

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

Exemple d'envFile:

{
  ...
  "envFile": "${workspaceFolder}/server/.env",
  ...
}
Isaac Pak
la source
Les deux sont toujours cassés pour python
garyM
1

comme solution de contournement, vous pouvez définir des variables d'environnement lors du démarrage de VSCode, par exemple, à l'aide de ce petit 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"

Enregistrez-le sous vscode.ps1et appelez-le à partir de la ligne de commande, comme ceci:

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

En juin 2020, cela est toujours très trompeur et cassé sur OSX Catalina 10.15.5. J'utilise des initiés VSCode avec l' extension CodeLLDB 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

Lors du lancement du débogueur avec le envmot clé sur, launch.jsonj'obtiens ceci:

entrez la description de l'image ici

Donc, en un mot, l'utilisation de la "env"directive dans launch.jsonaffichera le message dans la capture d'écran. Cela empêchera d'exécuter le débogueur, fonctionnalité manquante surprenante, mais assez juste.

Mais alors, en utilisant à la environmentplace de env, aucun message d'erreur n'apparaît mais les variables d'environnement ne sont pas disponibles sur le runtime en cours de débogage, donc getenv(whatever)ne renvoie pas la valeur réelle de cette clé: -!

idée de génie
la source