VS Code:在开发容器构建期间使用多根工作区文件夹列表

Ian*_*kel 5 visual-studio-code vscode-remote vscode-devcontainer devcontainer

我有一个~/projects/目录,其中包含一堆克隆的 Git 存储库。我喜欢选择其中的子集并将它们另存为 VS Code多根工作区~/projects/*.code-workspace

我还使用了一个开发容器,进行了配置,~/projects/.devcontainer.json以便所有工作区都能自动找到它。

当我构建开发容器时,我希望能够运行一些初始化逻辑,输入是打开的工作区中的文件夹列表。

我可以使用${containerWorkspaceFolder}in .devcontainer.json,但这给了我~/projects,而不是确切的文件,并且目录中.code-workspace有多个文件。.code-workspace如果我可以获得当前 .code-workspace 文件的路径,我可以解析 json 并获取文件夹列表,但似乎我只能获取父文件夹。

我尝试terminal.integrated.env.linux设置foo.code-workspace每个工作空间的环境变量CODE_WORKSPACE_FILE=~/projects/foo.code-workspace,但它对 devcontainer 构建不可见,仅在工作空间已在容器中打开后打开的集成终端中可见。

workspace.workspaceFolders()我看到vscode扩展API中有一个方法。我不想编写一个扩展只是为了将该值暴露给 devcontainers 系统,但也许这是目前唯一的方法。

还有其他想法吗?

小智 0

这并不完全符合您的要求,但如果您将源代码挂载在 devcontainer.json 中,则可以在 devcontainer 中使用代码工作空间文件。您可以使用mountsdevcontainer.json ( https://containers.dev/implementors/json_reference/ ) 中的属性。

首先,将以下内容添加到 devcontainer.json 文件中:

"mounts": [
  {"source":"~/projects","/projects","type":"bind"},
],
Run Code Online (Sandbox Code Playgroud)

其次,将 .devcontainer 文件夹移动到空目录。例如,您可以在主目录中创建一个以容器模板或项目命名的文件夹,例如~/nodejs-postgres. 将 *.code-workspace 文件复制到 .devcontainer 文件夹中。您应该具有以下文件夹结构:

- ~/nodejs-postgres
  - .devcontainer
    - devcontainer.json
    - project1.code-workspace
    - project2.code-workspace
    - ...
Run Code Online (Sandbox Code Playgroud)

接下来,编辑代码工作区文件,以便路径使用/projects而不是~/projects.

~/nodejs-postgres最后在开发容器中打开。容器构建完毕并可供使用后,您应该有一个代码窗口,其中仅打开 devcontainer 文件夹。您的整个项目文件夹已安装在容器中,但这些文件夹未在 vscode 中打开。

此时,您可以使用“将文件夹添加到工作区”命令将文件夹添加到 devcontainer 中的当前工作区,也可以在编辑器中打开代码工作区文件之一,然后单击Open Workspace出现的按钮。单击该按钮后,将打开容器中已挂载的项目文件夹。