为VSCode做贡献【编译VSCode】【中文文档】

为VSCode做贡献【编译VSCode】【中文文档】

为 Visual Studio Code 做贡献

参与 Visual Studio Code 项目的方法有很多:记录 bug、提交拉取请求、报告问题和创建建议。

克隆并构建存储库后,请查看问题列表。标记为 help wanted 的问题是提交 PR 的好问题。标记为 good first issue 的问题是首次使用代码时,非常适合选择。如果您正在贡献重大更改,或者如果问题已分配给特定月份里程碑,请在开始处理问题之前先与问题的受理人讨论。

先决条件

要下载必要的工具、克隆存储库并通过 安装依赖项,您需要网络访问权限。npm

注意

您应该克隆到不带空格的路径中,以避免在编译本机模块时出现问题。

您将需要以下工具:

  • Git 公司
  • Node.JS x64ARM64 版本(另请参阅 .nvmrc,它可能会提供更精确的安装版本)>=20.x

    • 如果使用 ,请考虑使用 更新 默认节点安装nvmnvm alias default <VERSION>
    • Windows:不要选择安装 Windows Build Tools 的选项,请参阅下面的步骤以获取说明
  • Python(node-gyp 需要;请查看 node-gyp 自述文件,了解当前支持的 Python 版本)

    • 确保可以从命令行提示符运行而不会出错python
    • 您的 Python 版本可能没有附带所有合适的实用程序,建议安装软件包 (),否则您可能会遇到难以调试的错误。setuptoolspip install setuptools
  • 适用于您的平台的 C/C++ 编译器工具链:
    • Windows 10/11(x64 或 ARM64)

      • 通过安装 Visual Studio 生成工具Visual Studio Community Edition 来安装 Visual C++ 生成环境。要安装的最小工作负载为 。但是 “Individual components” 中还有其他组件:Desktop Development with C++
        • MSVC v143 - VS 2022 C++ x64/x86 Spectre-mitigated libs (Latest)(用于 ARM 上的 Windows,但可能仍需要 x64/x86)ARM64
        • C++ ATL for latest build tools with Spectre Mitigations
        • C++ MFC for latest build tools with Spectre Mitigations
      • 打开命令提示符并运行并添加或修改与您的 VS 版本相同的设置。(例如 对于 Visual Studio 2022)npm config editmsvs_versionmsvs_version=2022
      • 警告:确保你的配置文件路径只包含 ASCII 字母,例如 John,否则会导致 node-gyp 使用问题 (nodejs/node-gyp/issues#297)
      • 注意:目前不支持通过适用于 Linux 的 Windows 子系统 (WSL) 进行构建和调试。
    • Windows WSL2https://github.com/microsoft/vscode/wiki/Selfhosting-on-Windows-WSL
    • macOS 的

      • Xcode 和命令行工具(将安装)以及包含gccmake

        • 运行 以安装 命令行工具xcode-select --install
    • Linux的

      • 在基于 Debian 的 Linux 上:sudo apt-get install build-essential g++ libx11-dev libxkbfile-dev libsecret-1-dev libkrb5-dev python-is-python3
      • 在基于 Red Hat 的 Linux 上:.sudo yum groupinstall "Development Tools" && sudo yum install libX11-devel.x86_64 libxkbfile-devel.x86_64 libsecret-devel krb5-devel # or .i686
      • 别人:
      • 构建 deb 和 rpm 包需要 和 ;跑:fakerootrpmsudo apt-get install fakeroot rpm

故障 排除

确保克隆到的文件夹在路径层次结构中没有任何空格。vscode

如果出现问题,请先尝试删除 的内容(或者对于 Linux、macOS 或 Windows),然后运行,然后重试。~/.node-gyp~/.cache/node-gyp~/Library/Caches/node-gyp/%USERPROFILE%\AppData\Local\node-gypgit clean -xfd

如果您使用的是 Windows 或 Linux 64 位系统并希望编译为 32 位,则需要在运行之前将环境变量设置为 。这将编译 32 位架构的所有本机节点模块。同样,在为 ARM 交叉编译时,设置为 。npm_config_archia32npmnpm_config_archarm

注意

有关如何在 UNIX 系统上全局安装 NPM 模块而不求助于 的更多信息,请参阅本指南sudo

警告

如果安装了 Visual Studio 2019,则在使用默认版本的 node-gyp 时可能会遇到问题。如果安装了 Visual Studio 2019,则可能需要按照此处的解决方案进行作。

Windows 上缺少幽灵缓解库

如果您使用的是 npm >= 10.2.3 或 node-gyp >= 10.0.0,那么在构建此项目的本机模块时可能会看到错误

此项目需要 Spectre 缓解库。

若要修复此错误,请打开 Visual Studio 安装程序,添加与要生成的体系结构 (x64/ARM/ARM64) 相对应的以下组件,然后重启生成会话

  • MSVC Spectre 缓解库(最新)
  • C++ ATL 用于具有 Spectre 缓解功能的最新生成工具
  • C++ MFC 用于具有 Spectre 缓解措施的最新生成工具

Windows ARM 上的 node-gyp 相关故障

对于构建工具的各个组件,您可能需要指定版本,例如 v14.41-17.11,而不是(最新),但选择一个不支持的版本。

macOS 上的 node-gyp 相关故障

如果您在使用 node-gyp 和 clang 构建本机模块时收到错误,请通过启用调试日志记录以接收更好的错误消息。export CXX="c++ -v"

开发容器

或者,可以避免本地依赖项安装,因为此存储库包括 Visual Studio Code Remote – 容器/Codespaces 开发容器

  • 对于远程 – 容器,请使用 Remote-Containers: Open Repository in Container…命令,该命令会创建一个 Docker 卷,以便在 macOS 和 Windows 上实现更好的磁盘 I/O。
  • 对于 Codespaces,请在 VS Code 中安装 GitHub Codespaces 扩展,然后使用 Codespaces:创建新的 Codespace 命令。

Docker/Codespace 应至少具有 4 个内核和 6 GB RAM(推荐 8 GB)才能运行完整版本。有关更多信息,请参阅开发容器自述文件

如果您想为 Remote – Containers 扩展中的可用开发容器列表做出贡献,可以查看 vscode-dev-containers 存储库中的贡献文档

启用 Commit Signing

如果您是社区成员,请随时跳过此步骤。

否则,如果您是 VS Code 团队的成员,请遵循提交签名指南。

构建并运行

如果您想了解 VS Code 的工作原理或想要调试问题,则需要获取源代码、构建源代码并在本地运行该工具。

注意

如果您需要在 32 位 Windows 上调试 64 位版本的 VS Code,请按照有关如何执行此作的指南进行作。

获取源

首先,创建 VS Code 存储库的分支,以便您可以发出拉取请求。然后,在本地克隆你的 fork:

git clone https://github.com/<<<your-github-account>>>/vscode.git


有时,您需要将上游存储库(官方代码存储库)中的更改与您的 fork 合并。

cd vscode
git checkout main
git pull https://github.com/microsoft/vscode.git main

管理任何合并冲突,提交它们,然后将它们推送到您的复刻。

注意

存储库包含一组 GitHub Actions,可帮助我们对问题进行分类。由于您可能不希望这些在您的 fork 上运行,因此您可以通过 .microsoft/vscodehttps://github.com/<<Your Username>>/vscode/settings/actions

使用以下方法安装和构建所有依赖项:npm

cd vscode
npm install



然后,您有两个选项:

  • 如果要从 VS Code 内部构建,可以打开文件夹并使用 ++(在 macOS 上为 ++)启动构建任务。即使您关闭 VS Code,构建任务也将在后台保持运行。如果您碰巧关闭了 VS Code 并再次打开它,只需再次按 ++ (++) 即可恢复构建。您可以通过运行任务或在任务终端中按 + 来终止它。vscodeCtrlShiftBCMDShiftBCtrlShiftBCMDShiftBKill Build VS CodeCtrlD
  • 如果要从终端构建,请运行 .这将在单个终端中运行 core watch 任务和 watch-extension 任务。npm run watch

增量构建器将执行初始完整构建,并在初始构建完成后显示一条消息,其中包含短语“已完成编译”。构建器将监视文件更改并以增量方式编译这些更改,从而为您提供快速的迭代编码体验。

故障 排除:

  • 窗户:如果您已安装 Visual Studio 2017 作为构建工具,则需要打开 VS 2017 的 x64 本机工具命令提示符。不要将其与 VS2015 x64 Native Tools Command Prompt(如果已安装)混淆。
  • Linux的:运行构建时,您可能会遇到 ENOSPC 错误。要解决此问题,请按照常见问题中的说明进行作。

如果构建步骤失败,或者构建的版本无法运行(请参阅下一节),请在您的文件夹中运行,然后重新运行 。git clean -xfdvscodenpm install

错误和警告

开发 VS Code 时,错误和警告将显示在控制台中。如果您使用 VS Code 开发 VS Code,则错误和警告会显示在编辑器左下角的状态栏中。您可以使用 + 然后按 + 然后按 (在 macOS 上为 + 和) 查看错误列表。View | Errors and WarningsCtrlP!CMDP!

提示

每次更改后,您无需停止并重新启动 VS Code 的开发版本。您可以直接从命令面板执行。我们喜欢将键盘快捷键 +(在 macOS 上为 +)分配给此命令。Reload WindowCtrlRCMDR

要测试更改,请在工作区上启动 VS Code 的开发版本,您当前正在编辑该版本。vscode

要使用远程测试更改,请使用代码 – OSS 窗口中的“TestResolver”,该窗口会创建一个虚假的远程窗口。在命令面板中搜索 。更多信息请访问 https://github.com/microsoft/vscode/issues/162874#issuecomment-1271774905TestResolver

桌面

在 Electron 上运行扩展在 NodeJS 中:

macOS 和 Linux

./scripts/code.sh
./scripts/code-cli.sh # for running CLI commands (eg --version)



窗户

.\scripts\code.bat
.\scripts\code-cli.bat



提示

如果您收到一条错误,指出该应用程序不是有效的 Electron 应用程序,则可能意味着您没有先运行。npm run watch

适用于 Web 的 VS Code

扩展和 UI 在浏览器中运行。

提示

此外,还可以运行以构建内置扩展的 Web 位。npm run watchnpm run watch-web

macOS 和 Linux

./scripts/code-web.sh



窗户

.\scripts\code-web.bat



代码服务器 Web

UI 中,扩展在代码服务器 (NodeJS) 中运行:

macOS 和 Linux

./scripts/code-server.sh --launch



窗户

.\scripts\code-server.bat --launch



您可以通过 Dock 或任务栏中的以下图标来识别 VS Code 的开发版本(“代码 – OSS”):

VS Code default icon

调试

VS Code 具有多进程架构,您的代码在不同的进程中执行。

渲染过程在 Shell 窗口中运行 UI 代码。要调试渲染中运行的代码,您可以使用 VS Code 或 Chrome 开发人员工具。

使用 VS Code

  • 打开存储库文件夹vscode
  • 从 Debug 视图中的启动下拉列表中选择启动配置,然后按 。VS CodeF5

使用 Chrome 开发者工具

  • 从 VS Code 开发实例中的命令面板运行命令以启动 Chrome 工具。Developer: Toggle Developer Tools
  • 还可以调试 VS Code 的已发布版本,因为源链接到联机托管的源映射。

sourcemaps

扩展主机进程运行由插件实现的代码。若要调试在扩展主机进程中运行的扩展(包括与 VS Code 打包的扩展),可以使用 VS Code 本身。切换到 Debug 视图,选择配置,然后按 。Attach to Extension HostF5

可以调试搜索过程,但必须先启动。在尝试附加之前,请按 +(在 macOS 上为 +)开始搜索,否则,附加将失败并超时。CtrlPCMDP

自动化测试

通过从文件夹运行直接从终端运行单元测试(在 Windows 上)。测试自述文件包含有关如何运行和调试测试以及如何生成覆盖率报告的完整详细信息。./scripts/test.shvscodescripts\test

我们还有自动化的 UI 测试。烟雾测试 README 包含所有详细信息。

单元测试

通过从文件夹(在 Windows 上)运行,直接从终端运行测试。测试自述文件包含有关如何运行和调试测试以及如何生成覆盖率报告的完整详细信息。./scripts/test.shvscodescripts\test

林亭

我们使用 eslint 来填充我们的源代码。您可以通过从终端或命令提示符调用来跨源运行 eslint。还可以通过按 +(在 macOS 上为 +)并输入 作为 VS Code 任务运行。npm run eslintnpm run eslintCtrlPCMDPtask eslint

要在进行更改时对源代码进行 lint,您可以安装 eslint 扩展

扩展

Visual Studio 市场无法从开源版本中使用。如果需要使用或调试扩展,可以检查扩展作者是否在其存储库中发布构建(检查页面),或者如果它是开源的,则可以在本地克隆和构建扩展。一旦你有了 .VSIX,可以通过命令行或使用“扩展视图”命令下拉列表中的“从 VSIX 安装”命令“旁加载”扩展(请参阅有关命令行扩展管理的详细信息)。vscodeBuilds

工作分支

即使您对 Microsoft/vscode 存储库拥有推送权限,也应该在需要时创建个人分支并在其中创建功能分支。这样可以保持主存储库的整洁,并使您的个人工作流程混乱不堪。

拉取请求

在我们接受您的拉取请求之前,您需要签署贡献者许可协议 (CLA)。这是一个自动化过程,您只需执行一次。

为了使我们能够快速审查和接受您的拉取请求,请始终为每个议题创建一个拉取请求,并在拉取请求中链接该议题。切勿将多个请求合并为一个请求,除非它们具有相同的根本原因。请务必遵循我们的 编码准则 ,并尽可能减少代码更改。避免对未修改的代码进行纯格式更改。拉取请求应尽可能包含测试。

引入带有 PR 的新 Electron API 的使用

依赖于 VS Code 当前未使用的 Electron API 的拉取请求具有一定的风险,可能会被拒绝。每当我们更新 Electron 时,不太流行的 Electron API 都有可能崩溃,并且很难预先发现。一旦 PR 进入 VS Code,维护该功能的角色就转移到了团队,因此我们必须跟进上游组件,以确保该功能仍然受支持。因此,根据经验:

  • 避免使用 Electron API 并使用 Web 标准(这也确保我们的 Web 客户端支持您的功能)
  • 如果您必须使用 Electron API,我们需要在 https://github.com/electron/electron 进行单元测试,以防止将来损坏。

在哪里做出贡献

查看完整的问题列表,了解所有潜在贡献领域的列表。请注意,仅仅因为存储库中存在问题并不意味着我们会接受对核心编辑器的贡献。我们可能不接受拉取请求的原因有多种,例如:

  • 性能 – Visual Studio Code 的核心价值之一是提供轻量级代码编辑器,这意味着它应该在实际性能和感知性能方面表现良好。
  • 用户体验 – 由于我们想要提供轻量级代码编辑器,因此用户体验也应该感觉轻量级,而不是混乱。对 UI 的大多数更改都应通过问题所有者和/或 UX 团队进行。
  • 架构 – 团队和/或功能所有者需要同意更改可能产生的任何架构影响。新扩展 API 之类的事情必须与功能所有者讨论并同意。

若要提高合并拉取请求的机会,应选择标有“需要帮助”或“bug”标签的问题。如果要处理的事务未标记为 或 ,您可以与事务所有者开始对话,询问是否会考虑外部贡献。help-wantedbug

为避免多个拉取请求解决同一问题,请在评论中说明,让其他人知道您正在处理该问题。

拼写检查错误

欢迎修复可翻译字符串(调用中的字符串)中的拼写检查错误的拉取请求,但请确保它不触及多个功能区域,否则将难以审查。建议仅修复源代码中的拼写检查错误的拉取请求。nls.localize(...)

包装

VS Code 可以打包到以下平台:win32-ia32 | win32-x64 | darwin-x64 | darwin-arm64 | linux-ia32 | linux-x64 | linux-arm

这些任务可用:gulp

  • vscode-[platform]:为 构建打包版本。[platform]
  • vscode-[platform]-min:为 . 构建打包和缩小的版本。[platform]

提示

运行 via 以避免潜在的内存不足问题,例如gulpnpmnpm run gulp vscode-linux-x64

另请参阅:基于 Debian 的 Linux 的交叉编译

建议

我们还希望你对 VS Code 的未来提供反馈。您可以通过问题跟踪器提交建议或功能请求。为了使此过程更加有效,我们要求这些内容包含更多信息,以帮助更清楚地定义它们。

翻译

我们接受通过本地化存储库中的 GitHub 问题对语言包中翻译的反馈,其中包含我们当前支持的语言包。

讨论礼仪

为了保持对话的清晰和透明,请将讨论限制在英语上,并保持与问题的话题有关。为他人着想,并始终保持礼貌和专业。

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容