【问题标题】:How do I add environment variables to launch.json in VSCode如何在 VSCode 中将环境变量添加到 launch.json
【发布时间】:2015-07-10 09:10:25
【问题描述】:

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

// 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 文件中使用了错误的格式,但我还没有找到任何方法来完成这项工作。

有什么想法吗?

【问题讨论】:

    标签: json node.js visual-studio-code


    【解决方案1】:

    我使用launch.json 中的env 属性成功传递了它们:

    {
      "version": "0.2.0",
      "configurations": [
        {
          "type": "pwa-node",
          "request": "launch",
          "name": "Launch Program",
          "skipFiles": [
            "<node_internals>/**"
          ],
          "program": "${workspaceFolder}/index.js",
          "env": {
            "TEST_VAR": "foo"
          }
        }
      ]
    }
    

    【讨论】:

    • 我收到了Property env is not allowd in launch.json
    • env 在当前版本的 VSCode 中已重命名为 environment,语法也发生了变化。请参阅下面@Gabriel 的帖子。
    • 截至今天(2021 年 8 月 2 日),我正在使用最新版本的 VSCode 1.58.2,@aljohn-yamaro 的回答对我有用。
    • 已更新。感谢 Gabriel 和 aljohn-yamaro 的结构更新。
    • env 对我和今天都有效
    【解决方案2】:

    这是有效的

    只需添加以下内容

    “环境”:{ “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"
            }
        }
    ]
    

    【讨论】:

    • 自原始问题以来对 VS Code 任务运行器进行了所有更改,这个答案应该在列表中向上移动,它是正确的并且有效!
    【解决方案3】:

    Windows 上的环境变量似乎存在问题(可能在 linux 上)。它确实适用于 OS X。我们正在调查。期待尽快修复。

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

    【讨论】:

    【解决方案4】:

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

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

    【讨论】:

    • 这也适用于我在 Linux 上,但我认为它也与调试器的类型密切相关(在我的情况下为cppdbg
    • 为什么字典现在在列表中?
    • @CeesTimmerman,这样您就可以拥有多个环境变量......每个都是一个名称和值的字典。有点冗长,但它确实允许“名称”和“路径”的自动完成。
    【解决方案5】:

    自 2016 年末以来,您还可以将envFile 用于 Node.js 项目

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

    另见:Load environment variables from external file (node)

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

    对于 Asp.Net Core 项目,此功能 isn't supported natively 由 vscode 提供,但 recently 已添加到 omnisharp vscode 扩展。此功能自 2018 年 9 月 10 日起通过v1.16.0 提供。

    【讨论】:

    • 这很方便,但是如何在 VSCode Launch 配置文件的“args”中使用这些变量?您可以指定“args”,但不能在那里使用环境变量(在终端中可以)
    • 我想做"args": ["-p", "${SERVER_PORT}"]"envFile": "${workspaceFolder}/.env",但看起来"${SERVER_PORT}" 不起作用
    • 是的,发现不支持也不支持github.com/microsoft/vscode/issues/89825
    【解决方案6】:

    版本 1.49.1

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

    警告:如果您已经有一个 .env 文件,它会自动包含它。 (根据 denislexic 评论)

    环境示例:

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

    envFile 示例:

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

    【讨论】:

    • 对于 python 来说两者都还是坏了
    • 如果您已经有一个 .env 文件,它会自动包含它,请添加警告...
    • envFile 示例在 JavaScript 中为我工作 感谢 Isaac
    【解决方案7】:

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

    【讨论】:

      【解决方案8】:

      作为参考,我遇到了一个不同语言的类似问题(在 2020 年,在上面接受的答案中提到的错误被修复很久之后),我想指出一些事情:

      根据Microsoft's documentation 的启动配置,包括"env" 在内的许多常见选项对于所有不同的调试/运行环境来说并不是必需的 功能——也就是说,在我看来,它不是 VS Code 为环境变量“提供”选项,而是选择特定的调试器扩展来实现此功能。因此,要么

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

      可能是因为您使用的特定语言/调试器不支持或未实现对环境变量的处理。

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

      【讨论】:

        【解决方案9】:

        它适用于我的 django 项目,使用 envFile 变量。 您可以查看此链接:https://code.visualstudio.com/docs/editor/debugging

        {
           "version": "0.2.0",
            "configurations": [
                {
                    "name": "Python: Django",
                    "type": "python",
                    "request": "launch",
                    "program": "${workspaceFolder}/project/manage.py",
                    "args": [
                        "runserver"
                    ],
                    "django": true,
                    "envFile": "${workspaceFolder}/project/Server/settings/local.env"
                }
            ]
        }
        

        【讨论】:

          【解决方案10】:

          在 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
          

          launch.json 上使用env 关键字启动调试器时,我明白了:

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

          但是,使用environment而不是env,没有弹出错误消息但是环境变量在被调试的运行时不可用,所以getenv(whatever)不会返回该键的实际值:-!

          【讨论】:

            【解决方案11】:

            作为一种解决方法,您可以在启动 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' }"
            

            【讨论】:

              猜你喜欢
              • 2023-03-09
              • 2021-07-02
              • 2020-11-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-10-07
              • 1970-01-01
              • 2019-07-21
              相关资源
              最近更新 更多