3

容器内的 VS Code 远程开发上下文中,我可以看到可以在devcontainers.json文件中指定要安装的扩展,如vscode-dev-containers 存储库中的示例所示,如下例所示:

"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.    <----

伟大的!

但是这个 hack 需要我硬编码目录所在的.devcontainer/目录的名称(即test1/),这当然是我想避免的。

有没有办法做到这一点,而无需在文件中对整个项目目录名称进行硬编码devcontainer.json

谢谢你。

4

1 回答 1

5

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

COPY vscode-cds-1.1.4.vsix /tmp/

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

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

这行得通。想知道是否有更好的方法。

于 2019-05-09T08:51:04.367 回答