如何通过DevContainer.json在远程容器中安装基于VSIX文件的扩展名



在VS代码远程开发的上下文中,我可以看到可以在devcontainers.json文件中指定要安装的扩展名,如VSCODE-DEV-CONTAINERS REPO中的示例中所示,如这个示例:

"extensions": [
        "dbaeumer.vscode-eslint"
]

我在本地有一个基于VSIX文件的扩展名,我也想在此处指定,以便将其安装到容器中。但是我不确定如何最好地在这里声明它。

我在容器构建步骤的输出中查看,并注意到本地项目目录已安装到容器中(添加了可读性的线路断点(:

Run: docker run -a STDOUT -a STDERR -p 127.0.0.1:4004:4004 
  -v /Users/dj/local/projects/test1:/workspaces/test1 
  -v /Users/dj/.gitconfig:/root/.gitconfig 
  -l vsch.quality=insider 
  -l vsch.local.folder=/Users/dj/local/projects/test1 
  -l vsch.remote.devPort=9753 
  vsc-test1-304320e2e9560b5557f6f7871801047f 
  /bin/sh -c echo Container started ;  while sleep 1; do :; done

因此,我将VSIX文件放在项目的根(/Users/dj/local/projects/test1/vscode-cds-1.1.4.vsix(的根部,然后在容器中可用。因此,将完全限定的路径添加到容器中的该文件到extensions属性:

"extensions": [
        "dbaeumer.vscode-eslint",
        "/workspaces/test1/vscode-cds-1.1.4.vsix"
]

确实确实导致该扩展名成功地安装到容器中:

Installing extensions...
Installing extension 'dbaeumer.vscode-eslint' v1.8.2...
Extension 'dbaeumer.vscode-eslint' v1.8.2 was successfully installed.
Extension 'vscode-cds-1.1.4.vsix' was successfully installed.    <----

太好了!

但是,这个黑客要求我用硬编码.devcontainer/目录为(即test1/(的目录的名称,我当然要避免使用哪个。

是否可以在devcontainer.json文件中使用硬编码整个项目目录名称进行硬编码?

谢谢。

在问这个问题后约10分钟,我想到了一种不同的方法,这可能仍然是一个黑客,但是它避免了必须使用项目目录名称。我将VSIX文件放在.devcontainer/目录中,然后将复制命令添加到我的Dockerfile的末尾:

COPY vscode-cds-1.1.4.vsix /tmp/

然后可以在extensions属性中指定此中性路径:

"extensions": [
        "dbaeumer.vscode-eslint",
        "/tmp/vscode-cds-1.1.4.vsix"
]

这有效。想知道是否有更好的方法。

devcontainer.json可以访问以下变量:

https://containers.dev/implementors/json_reference/#variables-in-devcontainerjson

所以在您的示例中是:

"extensions": [
        "dbaeumer.vscode-eslint",
        "${containerWorkspaceFolder}/vscode-cds-1.1.4.vsix"
]

在此pr

中添加了其他变量支持

相关内容

  • 没有找到相关文章

最新更新