如何从0开始将vscode源码编译、运行、打包桌面APP
**
网上关于此的内容很少,今天第二次的完整运行了,按照下文的顺序走不会出什么问题。最重要的就是环境的安装,否则极其容易报错,请参考我的依赖版本以及文末附上的vscode官方指南
**
第一步:克隆 VSCode 源码
首先,你需要从 GitHub 克隆 VSCode 的源代码。注意:如果你直接下载 .zip 文件,编译可能会报错,推荐使用 Git 克隆。
git clone https://github.com/Microsoft/vscode.git
cd vscode
第二步:安装依赖
要成功构建 VSCode,首先需要安装一些必要的依赖项。
-
Node.js:我使用的是 Node.js 版本 20.18.2。建议使用nvm管理node版本,理论上要求>=20。
-
Python:我使用的是 Python 3.13.2 版本,Python 是一些依赖编译的要求工具。可以从 Python 官网 下载并安装。
-
Visual Studio 2022:为了支持 C++ 编译,你需要安装 Visual Studio 2022 并确保启用了 C++ 相关的构建工具。可以从 Visual Studio 官网 获取。安装的最小工作量为Desktop Development with C++。但“单个组件”中还有其他组件:
MSVC v143 - VS 2022 C++ x64/x86 Spectre-mitigated libs (Latest)(用于ARM64ARM 上的 Windows,但可能仍然需要 x64/x86)
C++ ATL for latest build tools with Spectre Mitigations
C++ MFC for latest build tools with Spectre Mitigations
打开命令提示符并运行npm config edit并添加或修改msvs_version与您的 vs 版本相同的设置。(例如msvs_version=2022对于 visual studio 2022)
注意项目的路径全英文即可别带空格符号之类的像()就不行会报错,报错内容就不贴了大家注意就行
第三步:安装项目依赖
安装好所有的工具后,你可以开始安装 VSCode 项目的依赖:
npm install
npm install -g node-gyp
node-gyp 是一个构建工具,用于编译 Node.js 原生模块,它是 VSCode 项目的一部分,因此需要全局安装。
第四步:运行 VSCode
在你的vscode中打开源码文件夹运行以下命令
安装完依赖后,运行以下命令启动编译:
npm run watch
注意了,正常的情况应该是没有错误的,如果你之前删除lock.json或者使用--force之类的下载命令是可以正常调试,但是如果你要打包成桌面App的时候就欲哭无泪了,会各种失败,建议就是不要做这些高危操作!
然后根据你的操作系统,执行以下脚本:
- Windows:执行
./scripts/code.bat - MacOS 和 Linux:执行
./scripts/code.sh
小技巧:快速刷新开发版本
当你成功启动开发版本的 VSCode 后,可以使用快捷键 Ctrl + R 来刷新页面,避免每次修改后都需要重新启动 VSCode。这可以极大提高开发效率。
注意了,相当于热更新的作用,注意是在开发的vscode中使用此快捷键。默认的快捷键就是这个Ctrl + R
第五步:运行 VSCode(可选)
这里有一个大坑,这个打包的过程根据电脑的性能,最低也得半小时起步,而我之前运行的是最小化版本: npm run gulp vscode-win32-x64-min
解释:
-
npm run gulp vscode-win32-x64是用来构建 完整的 Windows 64 位桌面版本,它会生成一个可以运行的可执行文件(.exe 文件)以及其他相关文件,最终你可以使用它来启动修改后的 VSCode 桌面应用。 -
npm run gulp vscode-win32-x64-min是构建 最小化版本 的命令,它不会生成你期望的完整桌面应用,而是生成一个更小、更精简的版本,主要用于发布或者是为了测试轻量级功能。
如果你想打包成桌面APP,以上按照文章的步骤执行的话,这一步没有问题
VS Code 可以为以下平台打包:win32-ia32 | win32-x64 | darwin-x64 | darwin-arm64 | linux-ia32 | linux-x64 | linux-arm
gulp有以下任务可用:
vscode-[platform]:为 构建一个打包版本[platform]。
vscode-[platform]-min:为 构建打包和缩小的版本[platform]。
👉提示!运行gulpvianpm以避免潜在的内存不足问题,例如npm run gulp vscode-linux-x64
比如我想打包成Windows系统的APP,执行:npm run gulp vscode-win32-x64
版本信息
以下是版本名称的小结:
- Node.js 版本:20.18.2
- Python 版本:3.13.2
- node-gyp 版本:v11.1.0
参考文档
官方文档中提供了更详细的贡献指南,可以参考 如何贡献 VSCode 了解更多。
通过上述步骤,你应该能够成功地从源码编译并运行 VSCode。遵循这些步骤并确保环境配置正确,将帮助你顺利启动开发工作!
相关文章:
如何从0开始将vscode源码编译、运行、打包桌面APP
** 网上关于此的内容很少,今天第二次的完整运行了,按照下文的顺序走不会出什么问题。最重要的就是环境的安装,否则极其容易报错,请参考我的依赖版本以及文末附上的vscode官方指南 ** 第一步:克隆 VSCode 源码 首先…...
关于视频去水印的一点尝试
一. 视频去水印的几种方法 1. 使用ffmpeg delogo滤镜 delogo 滤镜的原理是通过插值算法,用水印周围的像素填充水印的位置。 示例: ffmpeg -i input.mp4 -filter_complex "[0:v]delogox420:y920:w1070:h60" output.mp4 该命令表示通过滤镜…...
如何在 Java 应用中实现数据库的主从复制(读写分离)?请简要描述架构和关键代码实现?
在Java应用中实现数据库主从复制(读写分离) 一、架构描述 (一)整体架构 主库(Master) 负责处理所有的写操作(INSERT、UPDATE、DELETE等)。它是数据的源头,所有的数据变…...
【css】width:100%;padding:20px;造成超出100%宽度的解决办法 - box-sizing的使用方法 - CSS布局
问题 修改效果 解决方法 .xx {width: 100%;padding: 0 20px;box-sizing: border-box; } 默认box-sizing: content-box下, width 内容的宽度 height 内容的高度 宽度和高度的计算值都不包含内容的边框(border)和内边距(padding&…...
【TI C2000】F28002x的系统延时、GPIO配置及SCI(UART)串口发送、接收
【TI C2000】F28002x的系统延时、GPIO配置及SCI(UART)串口发送、接收 文章目录 系统延时GPIO配置GPIO输出SCI配置SCI发送、接收测试附录:F28002x开发板上手、环境配置、烧录及TMS320F280025C模板工程建立F28002x叙述烧录SDK库文件说明工程建…...
【PyQt】信号与槽机制
PyQt信号与槽机制详解 🚀 一、信号与槽类型 🔌 1. 内置信号 📡 # 按钮点击信号 🖱️ QPushButton.clicked# 文本输入变化信号 ⌨️ QLineEdit.textChanged# 窗口关闭信号 🚪 QWidget.closeEvent2. 自定义信号 ✨ c…...
STM32 是什么?同类产品有哪些
STM32 是什么? STM32 是由意法半导体(STMicroelectronics)推出的基于 ARM Cortex-M 内核 的 32 位微控制器(MCU)系列。它专为高性能、低功耗的嵌入式应用设计,广泛应用于以下领域: 工业控制&am…...
20250213编译飞凌的OK3588-C_Linux5.10.209+Qt5.15.10_用户资料_R1
20250213编译飞凌的OK3588-C_Linux5.10.209Qt5.15.10_用户资料_R1 2025/2/13 11:43 缘起:飞凌发布了高版本内核的适配OK3588-C的Buildroot的SDK:OK3588-C_Linux5.10.209Qt5.15.10_用户资料_R1。 但是编译异常了。 于是按照百度升级libc6,可以…...
【DeepSeek】DeepSeek R1 本地windows部署(Ollama+Docker+OpenWebUI)
1、背景: 2025年1月,DeepSeek 正式发布 DeepSeek-R1 推理大模型。DeepSeek-R1 因其成本价格低廉,性能卓越,在 AI 行业引起了广泛关注。DeepSeek 提供了多种使用方式,满足不同用户的需求和场景。本地部署在数据安全、性…...
AI知识库 - Cherry Studio
1 引言: 最近 DeepSeek 很火啊,想必大家都知道,DeepSeek 这个开源的模型出来后,因其高质量能力和R1 的思维链引发了大家本地部署的热潮。我也不例外,本地部署了一个 14B 的模型,然后把,感觉傻傻…...
【ubuntu24.04】 强制重启导致大模型的磁盘挂载出错
挂载NTFS文件系统出错 各种模型放在了这个机械硬盘上,虽然速度慢,但是好在容量大。大模型在工作,但是程序看起来有问题,导致系统卡死了,然后我重启了,然后报错:wrong fs type bad option &…...
OpenLayer创建第一个基础地图实例
OpenLayers创建第一个基础地图实例 OpenLayers 是一个开源的 JavaScript 库,用于在网页上显示交互式地图。它支持多种地图源,包括 OpenStreetMap、Google Maps、Bing Maps 等。本文将介绍如何使用 OpenLayers 创建一个基础地图实例。 1. 准备工作 在开…...
Git命令摘录
使用 Git 升级软件通常是指通过 Git 仓库获取软件的最新版本或更新代码。以下是详细的步骤和方法: 1. 克隆软件仓库 如果这是你第一次获取软件代码,可以使用 git clone 命令将远程仓库克隆到本地。 git clone <仓库地址> 例如: git cl…...
windows 通过docker 安装mysql
参考:Docker安装并使用Mysql(可用详细)_docker 安装mysql-CSDN博客 1. 拉取镜像:docker pull mysql:5.7 2. 查看镜像:docker image 3. 创建mysql 容器实例,并将data 目录挂载到本地d盘上 docker run --n…...
实现Tree 树形控件的鼠标拖拽功能
1.element中的el-tree实现可拖拽节点 通过 draggable 属性可让节点变为可拖拽 <el-tree :data"data" node-key"id" default-expand-all node-drag-start"handleDragStart" node-drag-enter"handleDragEnter" node-drag-leave"…...
同为科技智能PDU助力Deepseek人工智能和数据交互的快速发展
1 2025开年,人工智能领域迎来了一场前所未有的变革。Deepseek成为代表“东方力量”的开年王炸,不仅在国内掀起了技术热潮,并且在全球范围内引起了高度关注。Deepseek以颠覆性技术突破和现象级应用场景席卷全球,这不仅重塑了产业格…...
硬件学习笔记--42 电磁兼容试验-6 传导差模电流干扰试验介绍
目录 电磁兼容试验-传导差模电流试验 1.试验目的 2.试验方法 3.判定依据及意义 电磁兼容试验-传导差模电流干扰试验 驻留时间是在规定频率下影响量施加的持续时间。被试设备(EUT)在经受扫频频带的电磁影响量或电磁干扰的情况下,在每个步进…...
基于 Filebeat 的日志收集
在现代分布式系统中,日志数据作为关键的监控与故障排查依据,越来越受到重视。本文将深入探讨 Filebeat 的技术原理、配置方法及在 ELK(Elasticsearch、Logstash、Kibana)生态系统中的应用,帮助开发者构建高效、稳定的日…...
Next.js 15【实用教程】2025最新版
官网 https://nextjs.org/docs/app/getting-started Next.js 简介 Next.js 由 Vercel 开发和维护,旨在解决单页应用(SPA)和多页应用(MPA)在性能和 SEO 上的不足。 核心特性 服务端渲染(SSR)--…...
vue学习10
1.GPT和Copilot Copilot Tab接受 删除键,不接受 ctrlenter更多方案 更适合的是修改方向 const submitForm async () > {//等待校验结果await formRef.value.validate()//提交修改await userUpdateInfoService(form.value)//通知user模块,进行数据更…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块࿰…...
