如何将环境变量添加到VSCode中的launch.json
在node.js项目上使用新的VSCode编辑器。我试图通过编辑Launch.json文件来配置我的“Launch”配置文件以进行调试。我需要将connectionstring设置为环境变量。根据launch.json文件中的注释:如何将环境变量添加到VSCode中的launch.json,json,node.js,visual-studio-code,Json,Node.js,Visual Studio Code,在node.js项目上使用新的VSCode编辑器。我试图通过编辑Launch.json文件来配置我的“Launch”配置文件以进行调试。我需要将connectionstring设置为环境变量。根据launch.json文件中的注释: // Environment variables passed to the program. "env": { } 我已尝试添加环境变量,如下所示: "env": { "CONNECTION_STRING": "Data Source=server;Initia
// 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文件中使用了错误的格式,但我还没有找到任何方法来实现这一点
有什么想法吗?Windows(可能还有linux)上的环境变量似乎有问题。它在OSX上确实有效。我们正在调查。希望很快得到解决
更新(2015年6月2日):Visual Studio代码0.3.0包含对此的修复。作为一种解决方法,您可以在启动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' }"
我正在使用
launch.json
中的environment
属性成功地传递它们:
{
"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"],
"environment": [
{"name":"AWS_REGION", "value":"us-east-1"},
{"name":"SLS_DEBUG", "value":"*"}
],
"outFiles": ["${cwd}/dist/**/*.js"],
"sourceMaps": true,
"smartStep": true
}
]
}
这样,在您的操作系统下:
"osx": {
"MIMode": "lldb",
"environment": [{"name": "DYLD_LIBRATY_PATH", "value": "/Users/x/boost_1_63_0/stage/lib/"}]
},
自2016年末起,您还可以对Node.js项目使用
envFile
:
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
VS代码节点调试器现在支持从文件加载环境变量并将其传递给节点运行时
另见:
要使用此功能,请将属性envFile添加到启动配置中,并指定包含环境变量的文件的绝对路径:
对于Asp.Net核心项目,此功能由vscode提供,但已添加到omnisharp vscode扩展中。此功能自2018年9月10日起通过提供。作为参考,我遇到了一个类似的问题(在2020年,在上述公认答案中提到的错误被修复很久之后),我想指出一些不同的语言: 根据启动时的配置,许多常见选项(包括
“env”
)不是所有不同调试/运行环境所需的功能-也就是说,在我看来,不是VS代码“提供”了环境变量选项,而是,选择特定的调试器扩展以实现此功能。因此,
- 调试应用程序意外崩溃
- 不允许使用警告
属性“env”
正如qbiq所说,如果环境变量不会在不同的启动之间发生变化,那么可能有一个快速的解决方法,就是导出它们并使用这组特定的变量集运行VS代码。我也遇到了同样的问题,结果是我的项目根目录中有一个
.env
文件,它覆盖了启动.json
设置。你已经被警告了。
:)这很有效
只需添加以下内容
“环境”:{
“节点环境”:“开发”
}
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program", //TODO: cmd as launch program
"skipFiles": [
"<node_internals>/**"
],
"program": "${workspaceFolder}\\index.js",
"env": {
"NODE_ENV": "development"
}
}
]
“配置”:[
{
“类型”:“节点”,
“请求”:“启动”,
“名称”:“启动程序”//TODO:cmd作为启动程序
“滑雪板”:[
"/**"
],
“程序”:“${workspaceFolder}\\index.js”,
“环境”:{
“节点环境”:“开发”
}
}
]
在2020年6月,OSX Catalina 10.15.5上仍然存在误导性和漏洞。我正在使用VSCode内部人员与CodeLLDB扩展版本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
当在launch.json
上使用env
关键字启动调试器时,我得到以下信息:
简而言之,在launch.json
中使用“env”
指令将在屏幕截图中显示消息。这将阻止运行调试器,令人惊讶的是,调试器缺少特性,但这已经足够公平了
但是,使用
environment
而不是env
,不会弹出错误消息,但是环境变量在正在调试的运行时不可用,因此getenv(无论什么)
不会返回该键的实际值:- 版本1.49.1
您可以使用launch.json文件中的env
属性或使用envFile
属性添加env变量,该属性的值为.env文件的位置
警告:如果你已经有一个.env文件,它会自动包含它。(根据denislexic评论)
环境示例:
{
...
"env": { "PORT": "4000" }
...
}
环境文件示例:
{
...
"envFile": "${workspaceFolder}/server/.env",
...
}
这很方便,但是如何在VSCode启动配置文件的“args”中使用这些变量呢?您可以指定“args”,但不能在那里使用环境变量(在终端中您可以)我想做
“args”:[“-p”、“${SERVER\u PORT}”]
以及“envFile”:“${workspaceFolder}/.env”
,但看起来像“${SERVER\u PORT}”
不起作用这在Linux上也适用于我,但我认为它也与调试器的类型密切相关(cppdbg
在我的例子中)为什么字典现在在一个列表中?@ceestimerman,它是这样的,所以你可以有多个环境变量…每个都是一个名称和值的字典。虽然有点冗长,但它确实允许自动完成“名称”和“路径”。它起作用了,thanksI Get属性env在启动时不被允许。json
env
在当前版本的VSCode中被重命名为环境
,语法也被更改。见@Gabriel belo的帖子