如何使用自定义Electron二进制文件构建Visual Studio Code?

fdx2calv  于 2023-11-15  发布在  Electron
关注(0)|答案(1)|浏览(156)

我一直在对Chromium代码库进行一些更改,我想在VSCode中进行测试。要执行此操作,我必须基本上遵循构建链:Chromium -> Electron -> VSCode。我的主要目标是构建此自定义VSCode二进制文件以执行一些测试。
对于Chromium -> Electron部分,我设法通过将.patch文件添加到patches/chromium目录并将该.patch文件的文件名添加到同一目录中的.patches文件来执行它。
然而,对于Electron -> VSCode部分,我目前卡住了。我确实看了一下issues page of VSCode,我看到一些人提到了Electron二进制文件的“交换”来执行一些测试,但关于如何做到这一点的确切方法从未在Wiki pages或各种问题中提到过。
在执行yarn之后,我确实在node_modules/electron/dist/中找到了一个electron二进制文件,但是用我的自定义Electron二进制文件替换该文件并不起作用,因为生成的code-oss文件似乎仍然使用旧的原始Electron二进制文件。
类似地,在执行yarn watch之后,.build/electron/中有一个code-oss文件,但是在执行scripts/code.sh之前替换它也不起作用(它导致了关于V8二进制和快照之间版本不匹配的错误消息)。
我还尝试跟踪scripts/code.sh file的执行,我最终在build/lib/electron.ts file中的getElectron函数。它似乎设置了一些配置值,并通过使用@vscode/gulp-electron package下载Electron构建。也许有一种方法可以以某种方式覆盖此下载过程?
我在Ubuntu 20.04,AMD 64上执行此操作。我将感谢有关此问题的任何帮助。谢谢!

dphi5xsq

dphi5xsq1#

事实证明,我已经在正确的方向上,但我被“V8版本不匹配”的错误信息误导了。
首先,按照official Electron build instructions构建Electron。

$ mkdir electron && cd electron
$ gclient config --name "src/electron" --unmanaged https://github.com/electron/electron
$ gclient sync --with_branch_heads --with_tags
$ cd src
$ export CHROMIUM_BUILDTOOLS_PATH=`pwd`/buildtools
$ gn gen out/Release --args="import(\"//electron/build/args/release.gn\")"
$ ninja -C out/Release electron

字符串
我没有运行的命令在官方说明页面的“打包”标题下。我最终也执行了这两个命令,因为它们会创建一个方便的ZIP文件供我们用途:

$ electron/script/strip-binaries.py -d out/Release
$ ninja -C out/Release electron:electron_dist_zip


一个dist.zip文件将被创建在out/Release目录中。用这个ZIP文件的内容替换.build/electron/目录中的内容。另外,记住将主Electron二进制文件从electron重命名为code-oss
这种替换.build/electron/目录内容的方法很有效。我忽略的是我必须替换整个目录,而不仅仅是code-oss文件(它只是主Electron二进制文件,但已重命名)。回想起来,这是有道理的,为什么“V8版本不匹配”错误被打印出来,但直到我花了更多的时间才为我点击。
我还做了以下修改(基本上是注解掉对getElectron的调用),以确保构建脚本不会意外替换我的自定义Electron文件:

diff --git a/build/lib/preLaunch.js b/build/lib/preLaunch.js
index 846e649a7c2..61d6510bd74 100644
--- a/build/lib/preLaunch.js
+++ b/build/lib/preLaunch.js
@@ -41,7 +41,7 @@ async function ensureCompiled() {
 }
 async function main() {
     await ensureNodeModules();
-    await getElectron();
+    // await getElectron();
     await ensureCompiled();
     // Can't require this until after dependencies are installed
     const { getBuiltInExtensions } = require('./builtInExtensions');
diff --git a/build/lib/preLaunch.ts b/build/lib/preLaunch.ts
index 3d3f513b591..3f1021d8ed0 100644
--- a/build/lib/preLaunch.ts
+++ b/build/lib/preLaunch.ts
@@ -47,7 +47,7 @@ async function ensureCompiled() {
 
 async function main() {
        await ensureNodeModules();
-       await getElectron();
+       // await getElectron();
        await ensureCompiled();
 
        // Can't require this until after dependencies are installed

相关问题