英文原文: VS Code Breaks NPM registry

微软在 VS 代码 1.7 版本中断了 npm 套件库的服务之后,推出了 VS 代码 1.7.1 版本。

VS 代码 1.7 版本提供的自动类型获取(ATA)功能,旨在监视开发人员的 package.json 文件,并自动将所有依赖项(dependencies)的类型声明文件(type declaration files)安装在文件系统上的缓存中。这不同于以前依靠开发人员手动安装类型声明文件来为 package.json 中的依赖项提供 IntelliSense。

以下摘录于项目经理 Wade Anderson 的微软1. 7 回滚事件报告,事件发生在他们团队在 V1.7 版本中将 ATA 功能推向市场之后:

11 月 2 日〜4:12 pm PST npm 与我们联系, 告知他们监测到巨大的套件库活动峰值,这些活动来自于试图在@types 范围内访问不存在的包(package)的客户端。峰值时,这些请求占所有流量的大约 10%(有趣的是,VS 代码用户发送请求的数量大约与 npm 监测到的印度的请求数量相同),并短暂地妨碍了他们的服务。

npm dev ops 迅速采取行动,以减轻无意的 DDoS 攻击,并判断该事件来源于 VS 代码 1.7 版本。关键原因是大量对不存在的包(package)的请求。

Anderson 解释说,TypeScript 语言服务器会先检查 package.json 中所列出的模块是否已在应用缓存中,然后再为那些不在缓存中的模块向 npm 发送请求:请求@ types/{module},添加任何尚未存在的模块。

“每次打开一个项目或文件,会为不存在的模块发出请求,并预期着将新的类型声明文件添加到@types 范围。这导致了 npm 响应 404 错误信息。鉴于不在@types 范围内的模块数量很大,大量的 404 会短暂影响 npm 的可用性”,Anderson 说。

除了应对 ATA 的无意 DDoS 攻击之外,1.7 版本还实现了许多重要更新,包括在 HTML 中 CSS 的自动补全。现在开发人员可以看到 CSS 语言特性了,它用于嵌入到 HTML 中的 CSS 样式的自动补全、验证和着色注释,如下图所示。

[attach]569581[/attach]

根据微软的博客文章,该版本还包含“多目标调试”的初期实现。这功能允许在 VS 代码的单个实例中同时活跃着多个调试进程。该更新使开发人员可以同时调试扩展及其调试适配器和/或语言服务器,同时还可以在单个项目文件夹中调试客户端和服务器,以及调试集群程序。

1. 7 版本还提供了 Node.js 调试,把那些必要但极少改变的属性设置成灰色,删除不太常用的属性,并把重写和改进的文档以及注释链接到在线文档。

Anderson 说 VS 代码团队将与 Typescript 团队合作,为 ATA 寻找一个“令人满意的修复”。