本文是“分布式架构的开源组件大选”Meetup的实录分享。分享嘉宾是来自微软云计算事业部的高级软件开发工程师刘鹏。
Visual Studio Code是微软开源的一款开发工具,它针对Docker做了许多编译和命令上的支持。
今天主要向大家介绍一下微软去年推出的一个Visual Studio Code,以及Visual Studio Code对Docker的一些支持。欢迎大家相互交流下如何更好的用Visual Studio Code在本地做Docker相关的开发和测试工作。
从VSCode的作者说起
首先想问大家一个问题,你理想中的开发工具是一个什么样子?基于不同的技术栈,有各种各样的开发工具,但是对于速度、性能、高亮、快捷键等诉求是相同的。一些人希望开发工具像擎天柱一样无所不能,对速度没有要求,安装SSD或者更多memory就可以;但另一些人更关注速度,要求秒级打开大量文件;而完美主义希望既快又占用资源少还要外观漂亮……
基于这些理念,微软去年推出了Visual Studio Code这样一款跨平台的开发工具。先介绍一下它的作者,这是去年作者来中国访问的时候一个朋友拿到的签名,这个人很有自信,他就是Erich Gamma。Erich Gamma之前开发了Junit,相当于JAVA的unit test的一个库,以及主导研发了Eclipse。当然最出名的还是他与另外三个人合伙,号称Gang of Four四人帮,写了一个很经典的书《设计模式》。2011年他加入微软,从事IT开发的工作。
Visual Studio family的新成员——VSCode的定位
Visual Studio Code定位是想为大家提供一个能够跨平台的新选择,主要偏向editor,让用户既能享受editor速度的情况下,又能享受IDE提供debug的便利性。它可以支持Linux,Mac平台,不再局限于Windows平台。另外VSCode本身是一个开源项目,在GitHub上大家可以看它的源码,在本地编译。
editor和IDE的定位是相对不同的,editor更像之前说的摩托车,要求系统占有率更低,性能更好,速度更快,支持很多语言。而IDE,它有强大的Debug分析功能,可以针对一些CI/CD进行集成,与语言绑定得比较紧密。VSCode定位则在中间这个位置,相对偏向IDE,既有editor性能方面的优势,同时集成了一部分IDE的Debug功能,比较灵活,对于Geek来说它是一个keyboard centered的IDE。
它的主要特点:第一是免费,随时可以download这样一个开发工具;第二是跨平台,核心技术基于Electron;第三是可定制化,包括UI、快捷键,很多用户行为都可以通过一个简单的配置文件去做配置。VSCode设计之初的理念就是速度。此外它是开源的,开发计划很透明,在GitHub上可以看到下个月发布的主要功能和下一阶段的计划。另外VSCode支持可扩展,大家都可以在这上面写插件,根据需求提供了更丰富的功能。
原来传统的Visual Studio family是Visual Studio加上Team Service,现在又补充进了Visual Studio Code,这样为大家提供一道从编辑器到IDE、到后台CI/CD完整的一套的流程。
罗马不是一天建成的——VSCode的历史
2011年, Erich Gamma加入微软时有一个任务,要创建一个基于浏览器的开发环境,但是要让用户使用的时候忘记在用浏览器,他们在瑞士成立了一个研发团队,这几年做了很多工作,比如在OneDrive上提供语言的代码编辑的工作,以及TypeScript学习的网站,在左边写TypeScript,右边会实时显示相应的javaScript,可以同时去学习这两种语言,比较它们之间的异同。
他们也做为IE浏览器里的开发者工具提供了很多功能,比如在bing的搜索结果里显示类似于开发环境的代码。最重要的是在Visual Studio Online提供一个叫“Monaca”的项目,真正把开发环境集成到了一个浏览器的环境。现在Visual Studio Code的代码还有大量基于Monaca的code,这是它的雏形,比如提供比较、语法高亮、智能提示等功能。
站在巨人的肩膀上——VSCode背后的技术
Visual Studio Code并不是从头开始做的,Visual Studio Code最早是基于JavaScript,基于Electron的内核,然后基于Chrom的内核,加上node.js。最初的时候它的语言是用JavaScript,现在已经百分之百的切换成了TypeScript。
Electron是GitHub推出的为node.js开发者提供一个跨平台的桌面程序的框架,核心基于Chrom内核, VSCode team在2014年的时候看到了它,决定把整个内核迁到上面。Electron类似于在桌面实现了一个小的浏览器的功能,会有一个主线程,在每个窗口下有一个显示的进程,每个进程里会有不同的Service,负责绘制不同部位的UI。其中一个比较特别的Service叫Extension Host,它负责与插件、调试服务或者一些代码检查服务进行交互,所有第三方插件都需要在Extension Host里面注册,比如什么时间去激活这个插件,然后什么时间和server进行通讯。在设计的时候特别采用了每个插件独立起一个进程的模式。
其它IDE或者编辑器安装很多插件的时候,一个插件的性能会破坏其它的插件性能,安装的插件越来越多,在打开文件或者进行操作的时候整个编辑器会变得越来越卡,但是通过Extension Host service注册所有的插件,每个插件运行在自己独立的进程里面,通过post Message进行异步交互,这样一个插件的进程卡掉了不会影响其它的进程,从而保证了编辑器的打开和交互用户的速度。
现在市场上有很多插件,针对不同的语言甚至不同的静态代码检查工具,这里只是其中一部分。在Visual Studio Code官网上有很详细的教程,大家可以按照它的教程写几个简单的,像词频的计算或是简单的语言插件。
视频演示:利用VSCode远程调试Docker中的 Node js程序
下面给大家演示一下Visual Studio Code针对Docker提供的编译或者命令上的支持。