如何在VSCode中将环境变量添加到launch.json


86

在node.js项目上使用新的VSCode编辑器。我正在尝试通过编辑launch.json文件来配置“启动”配置文件以进行调试。我需要将连接字符串设置为环境变量。根据launch.json文件中的注释:

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

我试过像这样添加我的环境变量:

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

当我尝试启动我的应用程序时,这会导致错误;“ OpenDebug进程意外终止”。我尚未找到任何可能解释问题所在的日志文件等。

我知道当我设置环境变量并从标准命令提示符启动我的应用程序时,该应用程序可以正常工作。如果我在launch.json文件中注释掉变量,该应用程序还将按预期运行;我只是无法连接到数据库。

我假设我在launch.json文件中使用了错误的格式,但是我还没有找到任何使此工作有效的方法。

有任何想法吗?

Answers:


22

Windows(可能是Linux)上的环境变量似乎存在问题。它确实可以在OS X上运行。我们正在调查。期待尽快修复。

更新(2015年6月2日): Visual Studio Code 0.3.0包含针对此问题的修复程序。


91

我已成功使用中的env属性传递了它们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
我得到了Property env is not allowd in launch.json
nowox

2
envenvironment在当前版本的VSCode中已被重命名为,语法也已更改。请参阅下面的@Gabriel帖子。
burito

14

这正在工作

在此处输入图片说明

只需添加以下内容

“ env”:{“ NODE_ENV”:“发展”}

"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
由于最初的问题,VS Code任务运行程序进行了所有更改,因此该答案应该在列表中上移,这是正确的,并且有效!
特雷弗

12

像这样,在您的操作系统下:

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

这对我在Linux上也适用,但我认为它也与调试器的类型密切相关(cppdbg以我
为例

为什么词典现在在列表中?
Cees Timmerman,

@CeesTimmerman,这样您就可以拥有多个环境变量...每个都有名称和值的字典。有点冗长,但确实允许自动完成“名称”和“路径”。
罗伯特·拉格

10

从2016年末开始,您还可以将envFile for.Node.js项目用于

VS代码节点调试器现在支持从文件加载环境变量,并将其传递给节点运行时。https://github.com/Microsoft/vscode/issues/15964

另请参阅:从外部文件(节点)加载环境变量

要使用此功能,请将属性envFile添加到启动配置,并指定包含环境变量的文件的绝对路径:

对于Asp.Net Core项目,vscode本身不支持此功能,但最近已将其添加到omnisharp vscode扩展中。此功能自2018年9月10日起通过v1.16.0提供


这很方便,但是如何在VSCode Launch配置文件的“ args”中使用这些变量?您可以指定“ args”,但不能在那里使用环境变量(可以在终端中使用)
Jerry Green

我想做"args": ["-p", "${SERVER_PORT}"]沿"envFile": "${workspaceFolder}/.env",不过貌似"${SERVER_PORT}"行不通
杰里格林

5

我遇到了同样的问题,结果.env是我的项目根目录中有一个文件将覆盖launch.json设置。您已经被警告了。:)


3

作为参考,我遇到了一个类似的问题(在2020年,修复了上面公认的答案中提到的错误之后很长时间),该问题针对另一种语言,我想指出一点:

Accoding到微软的文档上的启动配置,许多常见的选项,包括"env"requried所有不同的调试/运行环境的特点-这就是说,在我看来,这不是VS代码“提供”选项的环境变量,而是选择特定的调试器扩展来实现此功能。因此,

  • 调试应用程序意外崩溃
  • 警告 Property "env" is not allowed

可能由于您使用的特定语言/调试器不支持或尚未实现对环境变量的处理而发生。

正如qbiq所说,如果环境变量在启动时不会发生变化,则可能的快速解决方法是导出它们,并使用这组特定的变量集运行VS Code。


3

版本1.49.1

您可以通过使用envlaunch.json文件中的envFile属性或使用属性值为.env文件位置的属性来添加env变量。

环境示例:

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

envFile示例:

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

两者仍然都被python破坏了
garyM,

1

作为一种解决方法,您可以在启动VSCode时设置环境变量,例如,使用以下小型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"

将其另存为vscode.ps1,然后从命令行调用它,如下所示:

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

1

到2020年6月,这在OSX Catalina 10.15.5上仍然非常令人误解和破坏。我正在使用CodeLLDB扩展版本1.5.3的VSCode内部人员:

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

当启动带有env关键字的调试器时,launch.json我得到以下信息:

在此处输入图片说明

简而言之,使用"env"in命令launch.json将在屏幕快照中显示该消息。这将阻止运行调试器,这是令人惊讶的缺少功能,但是足够公平。

但是,使用environment代替时env,不会弹出错误消息,但是环境变量在调试的运行时中不可用,因此getenv(whatever)不会返回该键的实际值:-!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.