【问题标题】:How can I set secret environment variables in launch.json of VSCode for debugging?如何在 VSCode 的 launch.json 中设置秘密环境变量以进行调试?
【发布时间】:2019-02-27 23:28:38
【问题描述】:

我正在使用 VSCode 调试器并通过 env 属性设置环境变量。我还有需要设置为环境变量的数据库密码和机密,但我想签入launch.json,以便可以在团队等之间共享调试设置。

有没有一种方法可以设置这些敏感的环境变量以进行调试,而无需将其实际检查到源代码控制中?

【问题讨论】:

  • 这太疯狂了,没有更好的解决方案(假设你不能只插入一个环境变量,因为它可能在 VS Code 启动时没有设置——对于远程编辑,我甚至不知道如何设置它)。对命令的输出进行插值似乎是一种显而易见的方式,但将普通程序用作命令并不简单,尽管对这个问题的回答表明可以使用扩展:*.com/questions/58747689/…

标签: visual-studio-code


【解决方案1】:

有几种方法可以在 launch.json 中引用来自 Visual Studio Code (vscode) 的敏感数据,而无需将数据包含在 launch.json 文件中。

  • 环境变量
  • 输入变量:提示
  • 输入变量:自定义命令

vscode Variables Reference 很好地记录了这些解决方案。

环境变量 (docs)

您可以将敏感变量放在环境变量中(可能通过您的 shell 配置文件加载,例如 .bash_profile)。然后,您可以“通过 ${env:Name} 语法(例如,${env:USERNAME})”引用它。

{
  "type": "node",
  "request": "launch",
  "name": "Launch Program",
  "program": "${workspaceFolder}/app.js",
  "cwd": "${workspaceFolder}",
  "args": ["${env:USERNAME}"]
}

输入变量 (docs)

提示输入

您可以通过定义promptString 输入类型在启动时提示敏感信息,如以下从文档中提取的配置所示。下面的${input:componentName} 用作参数,并在下面的inputs 部分中定义为promptString,以便在您运行相关任务时提示您输入值。

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "ng g",
      "type": "shell",
      "command": "ng",
      "args": ["g", "${input:componentType}", "${input:componentName}"]
    }
  ],
  "inputs": [
    /** skipping componentType definition for brevity -- see docs for that */
    {
      "type": "promptString",
      "id": "componentName",
      "description": "Name your component.",
      "default": "my-new-component"
    }
  ]
}

promptString的定义如下:

  • 描述:显示在快速输入中,为输入提供上下文。
  • default:用户不输入其他内容时将使用的默认值。
  • 密码:设置为 true 以使用不会显示键入值的密码提示输入。

为输入运行自定义命令

您还可以运行自定义命令来获取输入。文档使用以下配置作为示例。请注意,与其他输入类型一样,该命令必须在 inputs 部分中使用 type 定义。

{
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Run specific test",
      "program": "${workspaceFolder}/${input:pickTest}"
    }
  ],
  "inputs": [
    {
      "id": "pickTest",
      "type": "command",
      "command": "extension.mochaSupport.testPicker",
      "args": {
        "testFolder": "/out/tests"
      }
    }
  ]
}

command 类型的其他选项是:

  • command:在变量插值上运行的命令。
  • args:传递给命令实现的可选选项包。

【讨论】:

    【解决方案2】:

    我为此使用了一种解决方法,即使用 dotenv 包。

    因此,不是依赖 VSCode 来加载环境变量,而是从应用程序本身加载它们。

    【讨论】: