微軟在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樣式的自動補全、驗證和著色注釋,如下圖所示。
根據微軟的博客文章,該版本還包含“多目標調試”的初期實現。這功能允許在VS代碼的單個實例中同時活躍著多個調試進程。該更新使開發人員可以同時調試擴展及其調試適配器和/或語言服務器,同時還可以在單個項目文件夾中調試客戶端和服務器,以及調試集群程序。
1.7版本還提供了Node.js調試,把那些必要但極少改變的屬性設置成灰色,刪除不太常用的屬性,并把重寫和改進的文檔以及注釋鏈接到在線文檔。
Anderson說VS代碼團隊將與Typescript團隊合作,為ATA尋找一個“令人滿意的修復”。
查看英文原文: VS Code Breaks NPM registry