【vscode源码】如何编译运行vscode及过程中问题解决

devtools/2025/2/11 7:24:32/

Visual Studio Code(VSCode)作为一款流行的开源编辑器,市面上很多基于vscode的套壳APP,本文将详细介绍如何编译和运行VSCode的源码,并总结一些常见问题以及解决方案,帮助开发者顺利二次开发。


1. 准备工作(Node.js、Python、C++)

在开始编译之前,我们需要确保系统上安装了一些必要的软件和工具:

1.1 安装Node.js与npm

VSCode是基于Electron构建的,而Electron是一个框架,它依赖于Node.js来处理应用的后端功能。因此,首先需要安装Node.js和npm(Node包管理器)。可以通过以下步骤安装:

  • 访问 Node.js官网 下载并安装LTS版本。

  • 安装完成后,打开终端(Terminal),通过以下命令验证安装是否成功:

    node -v
    npm -v
    

    如果输出版本号,说明安装成功。建议node版本>=20.x

1.2 安装Python和C++构建工具

VSCode的编译过程需要Python以及C++的构建工具,因此需要确保系统中已安装Python(版本>=3.6)和Visual Studio Build Tools。

Windows 10/11(x64 或 ARM64)
  1. 安装 Visual C++ 构建环境:

    • 通过安装 Visual Studio 构建工具或 Visual Studio 社区版来安装 Visual C++ 构建环境。
    • 安装的最小工作量为 Desktop Development with C++,但在“单个组件”中可能还需要其他组件:
      • MSVC v143 - VS 2022 C++ x64/x86 Spectre-mitigated libs (Latest)(适用于 ARM64 及 ARM 上的 Windows,但可能仍然需要 x64/x86)
      • C++ ATL for latest build tools with Spectre Mitigations
      • C++ MFC for latest build tools with Spectre Mitigations
        在这里插入图片描述
  2. 配置 Node.js 构建工具:

    • 打开命令提示符并运行 npm config edit,添加或修改 msvs_version 配置项,与您的 Visual Studio 版本相同。例如:
      msvs_version=2022
      
    • 警告: 确保您的配置文件路径仅包含 ASCII 字母字符(例如 John),否则可能会导致 node-gyp 使用问题(参考 nodejs/node-gyp/issues#297)。
  3. 注意:

    • 当前不支持通过 Windows 的 Linux 子系统(WSL)进行构建和调试。
    • 如果需要在 Windows 上使用 WSL2,请参考 Selfhosting-on-Windows-WSL。
macOS
  1. 安装 Xcode 和命令行工具:
    • 安装 gcc 并包含相关工具链(如 make)。
    • 运行以下命令安装命令行工具:
      xcode-select --install
      
Linux
  1. 在基于 Debian 的 Linux 上:

    • 执行以下命令安装构建工具和依赖:
      sudo apt-get install build-essential g++ libx11-dev libxkbfile-dev libsecret-1-dev libkrb5-dev python-is-python3
      
  2. 在基于 Red Hat 的 Linux 上:

    • 执行以下命令安装开发工具和依赖:
      sudo yum groupinstall "Development Tools" && sudo yum install libX11-devel.x86_64 libxkbfile-devel.x86_64 libsecret-devel krb5-devel # 或者 .i686
      
其他的:
  1. 安装依赖:

    • 安装 makepkg-configGCC 或其他编译工具链。
  2. 构建 deb 和 rpm 包:

    • 需要 fakerootrpm
      sudo apt-get install fakeroot rpm
      

建议Python版本使用3.8

2. 获取VSCode源码

2.1 克隆VSCode的源码

VSCode的源码托管在GitHub上,因此可以通过Git来克隆项目:

git clone https://github.com/Microsoft/vscode.git
cd vscode

执行这两条命令后,VSCode的源代码将被克隆到本地,并进入项目目录。

2.2 切换到稳定分支(可选)

默认情况下,git clone 克隆的项目会指向最新的开发分支。如果你希望编译一个稳定版本,可以切换到稳定分支:

git checkout -b stable origin/stable

这样可以确保你编译的是最新的稳定版本。

3. 安装依赖

VSCode的源代码包含大量的依赖包,编译时需要安装这些依赖。在项目根目录中运行以下命令:

npm install

这条命令会根据package.json文件中的依赖信息,自动下载和安装所有依赖包。这个过程可能需要一些时间,具体取决于网络环境和电脑性能。

4. 编译VSCode

4.1 运行编译命令

安装完所有依赖后,VSCode的源码就可以开始编译了。运行以下命令开始编译过程:

npm run watch

此命令会启动一个监听过程,当代码发生变化时,自动重新编译。在编译过程中,终端会显示相关的编译信息。

4.2 编译完成后的启动

编译完成后,可以运行VSCode,验证是否编译成功。运行以下命令启动编译后的VSCode:

# Windows
./scripts/code.bat
# MacOS & Linux
./scripts/code.sh

5. 常见问题与解决方法

在编译VSCode的过程中,开发者可能会遇到一些问题。以下是一些常见问题和解决方案。

在这里插入代码片
5.1 问题:编译过程中出现内存不足错误

在运行npm run watch时,如果遇到内存不足错误,可以通过调整Node.js的内存限制来解决。修改命令如下:

node --max-old-space-size=8192 ./node_modules/gulp/bin/gulp.js watch

通过--max-old-space-size=8192,将Node.js的最大内存设置为8GB,这通常可以解决内存不足的错误。

5.2 问题:安装依赖时网络问题

在国内,有时因为网络问题,npm install 会下载失败。可以尝试使用淘宝镜像来加速下载依赖:

npm config set registry https://registry.npm.taobao.org

这样设置后,所有的npm命令都会使用淘宝的镜像源进行下载。

5.3 问题:node-gyp 错误

安装 Visual Studio 并确保选择了 C++ 桌面开发 工作负载。这是编译原生 Node 模块所必需的。
安装好 Visual Studio 后,可以重新运行 npm install。

5.4 问题:版本冲突或依赖错误

有时,npm install 可能会因为某些依赖版本冲突而失败。解决方法可以尝试以下命令清空缓存并重新安装:

npm cache clean --force
npm install

如果依然存在版本冲突,可以考虑删除node_modules目录和package-lock.json文件后再重新安装。

5.5 问题:无法删除某些目录(EBUSY 错误)

使用管理员权限来执行命令

5.6 问题:运行./scripts/code.bat命令后弹窗报错

使用管理员权限来执行命令
watch命令后多等会再执行,并且电脑配置不能太低尤其是内存,多试几次,概率问题

6. 自定义修改与二次开发

在成功编译并运行VSCode后,开发者可以根据自己的需求对VSCode进行二次开发或自定义修改。例如:

  • 修改主题:你可以根据需要修改VSCode的界面主题、字体或颜色等样式。
  • 添加插件:你可以开发自己的VSCode插件,并将其集成到你的本地版本中。
  • 调试功能:如果你需要调试某些功能,可以通过VSCode自带的调试工具进行调试。

7. 总结

本文详细介绍了如何编译和运行VSCode源码的步骤,并总结了在过程中可能遇到的常见问题以及解决方法。希望通过这些内容,能够帮助开发者更顺利地进行VSCode源码的编译和二次开发。

参考资料:

vscode 定制开发 —— 基础准备

编译运行VSCode源码

Contributing to Visual Studio Code


http://www.ppmy.cn/devtools/157861.html

相关文章

node.js使用mysql2对接数据库

一、引言 在现代Web开发中,Node.js作为一种高效、轻量级的JavaScript运行时环境,已经广泛应用于后端服务的开发中。而MySQL,作为一个广泛使用的关系型数据库管理系统(RDBMS),提供了强大的数据存储和查询功能…

安卓基础(Okhttp3)

1️⃣ 添加 OkHttp 依赖 📌 在 app/build.gradle 添加 OkHttp 依赖 dependencies {implementation com.squareup.okhttp3:okhttp:4.9.3 }2️⃣ 发送 GET 请求 📌 发送一个 GET 请求 实例化okhttp客户端--->创建请求--->发送请求 import okhtt…

C# 两种方案实现调用 DeepSeek API

目录 序 开发运行环境 访问API的一个通用方法 原生官网实现 申请 API key 调用实现 调用示例 腾讯云知识引擎原子调用 申请 API key 调用示例 小结 序 DeepSeek(深度求索) 最近可谓火爆的一塌糊涂,具体的介绍这里不再赘述&#x…

java打印出每个文件夹里的所有文件名

在 Java 中,若要打印出每个文件夹里的所有文件名,可以使用递归方法来遍历文件夹及其子文件夹。下面将分别介绍使用传统的 java.io 包和 Java 7 引入的 java.nio.file 包来实现该功能。 使用 java.io 包实现 import java.io.File;public class PrintFil…

全志T527 音频适配

移植tlv320aic3111音频驱动 1.第一步,修改dts设备树,在设备树中添加有关音频芯片的硬件资源。因为板子跟音频芯片采用的twin连接,tlv320aic31xx节点地址为18,在twi中添加如下信息 tlv320aic31xx: tlv320aic31xx@18 { #sound-dai-cells = <0>; …

【网络法医】Docker取证

【网络法医】Docker取证 1.docker变更记录取证2.docker镜像取证3.工具取证 1.docker变更记录取证 如果怀疑docker容器被破坏。例如如下wordpress容器&#xff1a; docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS …

Java项目: 基于SpringBoot+mybatis+maven+mysql实现的智能学习平台管理系(含源码+数据库+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismavenmysql实现的智能学习平台管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、…

2. 4 模块化JDK:JDK模块结构与核心模块

第3章&#xff1a;模块化JDK&#xff1a;JDK模块结构与核心模块 JDK 9 将自身拆分为一系列模块&#xff0c;彻底告别传统的“单一JAR&#xff08;如 rt.jar&#xff09;”模式。本章深入解析 JDK 的模块化架构、核心模块功能及开发者如何高效利用这些模块。 3.1 JDK 模块化设计…