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

ops/2025/2/12 2:23:06/

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/ops/157669.html

相关文章

【Ubuntu VScode Remote SSH 问题解决】Resolver error: Error: XHR failed

问题描述 VScode使用remote ssh 远程服务器,报错类似: [12:06:01.219] Downloading VS Code server locally... [12:06:01.310] Resolver error: Error: XHR failedat k.onerror (vscode-file://vscode-app/private/var/folders/g1/cvs2rnpx60qc3b4_x7…

03-DevOps-安装并初始化Gitlab

Gitlab可以理解为是自己搭建的GitHub,也就是自己的代码仓库。 开启macvlan 在192.168.1.10服务器上,构建Macvlan网络,这种网络模式可以为每个容器独立分配ip。 docker network create -d macvlan \--subnet192.168.1.0/24 \--ip-range192.16…

react 19 useOptimistic 竞争更新乐观值时阻塞

react 19 刚刚出,我在官网上调试这个 useOptimistic api 时,发现了一个竞争调用时的阻塞状态。当连续多次调用 updateFn 参数,且每次更新时间较长时,乐观状态的更新被阻塞了。 前往官网 useOptimistic 一节,修改末尾 …

新数据结构(1)冒泡排序和堆排序

冒泡排序 前后两两对比进行交换,每轮至少一个数组变得有序(未排序的最大数值找到正确位置) 代码: package Test20250206;public class BubbleSort {public static void main(String[] args) {// TODO Auto-generated method stu…

F - Building Roads S

Description Farmer John had just acquired several new farms! He wants to connect the farms with roads so that he can travel from any farm to any other farm via a sequence of roads; roads already connect some of the farms. Each of the N (1 ≤ N ≤ 1,000) …

FastReport 加载Load(Stream) 模板内包含换行符不能展示

如下代码 当以FastReport 载入streams时 当模板内包含换行符时会导致不能正常生成pdf System.Xml.XmlDocument newFrxXml new System.Xml.XmlDocument(); newFrxXml.Load(fileName);FastReport.Report report new FastReport.Report();using (var memStream new MemoryStre…

String bean配置-基础笔记

前言:在哔哩哔哩上找的黑马课程做的笔记,课程地址是Spring-06-bean基础配置_哔哩哔哩_bilibili bean基础配置 bean别名配置: bean的作用范围: spring给我们创建的对象默认的是单例的,在bean里面配置scope,可创建多个…

Lisp语言的字符串处理

Lisp语言的字符串处理 Lisp(LISt Processing)是一种历史悠久的编程语言,因其独特的表现形式和强大的符号处理能力而受到广泛关注。在Lisp中,字符串处理是一个重要的领域,涉及到许多操作和技巧。本篇文章将深入探讨Lis…