如何在 VSCode 的 launch.json 中使用自定义环境变量

Posted

技术标签:

【中文标题】如何在 VSCode 的 launch.json 中使用自定义环境变量【英文标题】:How do I use custom environment variables in launch.json in VSCode 【发布时间】:2020-11-11 23:34:05 【问题描述】:

我知道这个问题听起来可能与这个问题相似:How do I add environment variables to launch.json in VSCode

但我真正想要的是在实际的 launch.json 文件中使用我的 .env 文件中的变量,而不是在程序中使用它们。

所以我的设置是这样的:

project-root/
  |-- .env
  |-- .vscode/
        |-- launch.json
  |-- src/
        |-- my-plugin/
        |-- my-theme/
  |-- wordpress/
  |-- data/
  |-- docker-compose.yml

在我的 .env 文件中,我有这个:

PLUGIN_SLUG=my-plugin
THEME_SLUG=my-theme

现在,在我的 launch.json 文件中,我真的希望能够像这样使用 $THEME_SLUG$PLUGIN_SLUG 变量:


  "version": "0.2.0",
  "configurations": [
    
      "name": "Listen for XDebug",
      "type": "php",
      "request": "launch",
      "port": 9000,
      "pathMappings": 
        "/var/www/html/wp-content/plugins/$PLUGIN_SLUG": "$workspaceRoot/src/$PLUGIN_SLUG",
        "/var/www/html/wp-content/themes/$THEME_SLUG": "$workspaceRoot/src/$THEME_SLUG",
        "/var/www/html": "$workspaceRoot/wordpress",
      ,
    
  ],

知道如何实现吗?

::编辑::

进一步挖掘后,我意识到当我在/etc/profile.d/temp.sh 中全局设置变量时,如下所示:

export PLUGIN_SLUG=codeable-plugin
export THEME_SLUG=codeable-theme

退出系统并重新登录后,我可以在任何地方使用这些变量,包括在我的 launch.json 文件中,如下所示:

   "/var/www/html/wp-content/plugins/$env:PLUGIN_SLUG": "$workspaceRoot/src/$env:PLUGIN_SLUG",
   "/var/www/html/wp-content/themes/$env:THEME_SLUG": "$workspaceRoot/src/$env:THEME_SLUG",

虽然这离我想要的更近了一步,但实际上并不可行,每次我切换项目时在我的全局操作系统配置中手动更新这些变量,然后注销并再次登录。

【问题讨论】:

你用的是什么扩展? php 不是启动配置的有效类型。最终,我认为你会很遗憾地受到扩展支持的摆布。我认为您的问题是特定于 php 并使用 .env 文件而不仅仅是“使用自定义环境变量”,因为例如,节点启动配置已经支持使用 envFile @soulshined PHP Debug by Felix Becker。您对如何为简单的节点启动配置完成它有任何参考吗? (没有 PHP) 当然。您只需使用内置节点配置并调用envFile 属性,输入文件名并引用您执行的变量,就像您在示例中显示的那样:$env: 我确定我使用默认节点项目尝试过此操作,并且我很确定 VSC 不会自动加载 .env 文件。我相信$env: 仅适用于全局系统变量。不过我可能是错的。您是否找到任何有关此的文档? 它不会自动加载.env 文件,正确。这就是 envFile 属性的用途。 github.com/microsoft/vscode-js-debug/blob/master/OPTIONS.md 【参考方案1】:

您可以借助扩展程序 Command Variable v1.4.0 来做到这一点。

您可以将.env 文件视为键值对文件。

您可以通过输入变量获取环境值的值:$input:name

在输入变量中,您指定要使用的文件和密钥以及可能的默认值。


  "version": "0.2.0",
  "configurations": [
    
      "name": "Listen for XDebug",
      "type": "php",
      "request": "launch",
      "port": 9000,
      "pathMappings": 
        "/var/www/html/wp-content/plugins/$input:envPLUGIN": "$workspaceFolder/src/$input:envPLUGIN",
        "/var/www/html/wp-content/themes/$input:envTHEME": "$workspaceFolder/src/$input:envTHEME",
        "/var/www/html": "$workspaceFolder/wordpress",
      ,
    
  ],
  "inputs": [
    
      "id": "envPLUGIN",
      "type": "command",
      "command": "extension.commandvariable.file.content",
      "args": 
        "fileName": "$workspaceFolder/.env",
        "key": "PLUGIN_SLUG",
        "default": "default-plugin"
      
    ,
    
      "id": "envTHEME",
      "type": "command",
      "command": "extension.commandvariable.file.content",
      "args": 
        "fileName": "$workspaceFolder/.env",
        "key": "THEME_SLUG"
      
    
  ]

【讨论】:

这看起来可行!非常感谢。我发现这部分文档特别有用:github.com/rioj7/command-variable#file-content-key-value-pairs

以上是关于如何在 VSCode 的 launch.json 中使用自定义环境变量的主要内容,如果未能解决你的问题,请参考以下文章

VSCode仅为许多项目之一创建Launch.json和Tasks.json文件

VSCode - Launch.json指定参数

在 VS Code-debugger 中,如何在 nodejs 的 launch.json 中使用 envFile?

如何使用vscode断点调试laravel

VSCode launch.json配置详解

json VSCode调试launch.json示例