VScode启动流程

vscode使用electron架构,入口点在package.json中定义在这里插入图片描述
说明入口文件在out/main.js,它对应的源文件在src/main.js,这两个文件是一样的(我也不知道原因,以后搞懂了再补充)。
现在看src/main.js这里定义了app

在这里插入图片描述
这里对ready的事件监听,
//一旦准备就绪,就加载我们的代码
在这里插入图片描述
其中调用了onReady()函数,跟进查看,里面定义了startup()函数,后续会根据配置的不同用不同的参数调用这个startup,但只是不同方式的启动而已。

首先获取缓存文件目录地址和语言配置,然后调用startup

在这里插入图片描述
跟进startup
在这里插入图片描述
第185行代码调用amd的方式来加载vs/code/electron-main/main模块,进入main process初始化流程。

这里是先加载vscode自己开源的AMD Loader https://github.com/Microsoft/vscode-loader/
然后使用这个loader去加载vscode的主入口文件

“快捷键command+p”搜索查看这个主入口文件
开头就导入了一个配置文件,先不管他
在这里插入图片描述
然后出现了一个CodeMain类
在这里插入图片描述
翻到最后,看到这里是主启动入口,先初始化主类,然后执行入口函数
在这里插入图片描述

我们再回头查看这个CodeMain类:
main方法中调用startup(args)
在这里插入图片描述
在main.ts的startup中会创建一个instantiationService的实例服务。这个服务本身的实现类,通过import可以看到import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService';
在这里插入图片描述
然后初始化服务在这里插入图片描述
接下来启动服务在这里插入图片描述启动服务的这个方法中
这里是启动ipc的server,与render的进程进行互相通信。
在这里插入图片描述
然后实例服务创建CodeApplication并调用startup()。
在这里插入图片描述
这里的createInstance会返回一个app.ts中的类,然后调用src/vs/code/electron-main/app.ts的startup()。点击startup()跟进到app.ts中。
startup()方法中
创建Electron IPC Server,用于主进程和渲染进程间通信
在这里插入图片描述
创建服务
在这里插入图片描述创建了第一个窗口
在这里插入图片描述
openFirstWindow
在这里插入图片描述
接下来是open our first window,这里用if语句来判断不同情况,然后都是return调用了相同的方法windowsMainService.open()
在这里插入图片描述

跟进open()方法进入到src/vs/platform/windows/electron-main/windows.ts在这里插入图片描述
鼠标放到open()方法上
在这里插入图片描述
可以看到open()方法是在IWindowsMainService中,往上几行看IWindowsMainService的定义
在这里插入图片描述
然后再根据createDecorator的作用可以知道调用了同目录下的windowsMainService,打开src/vs/platform/windows/electron-main/windowsMainService.ts
找到open()方法
在这里插入图片描述
往下看到了
在这里插入图片描述
这里调用doopen()方法
再去看一下doopen()方法的内容
这里多次调用了openInBrowserWindow()
在这里插入图片描述
跟进openInBrowserWindow()看到这里创建了一个窗口
在这里插入图片描述
在这方法最后,返回了一个window,由上图可知这是个CodeWindow实例
在这里插入图片描述

那么现在跟进一下CodeWindow看看里面到底有什么
可以看到这里定义了一个load()方法
在这里插入图片描述
方法中有负责加载URL的部分
在这里插入图片描述
这里的loadURL()是electron框架中的方法,这里不研究。getUrl()则在下方代码有定义
查看getUrl()方法
在这里插入图片描述
其返回的是configUrl

在这里插入图片描述
查看configUrl的定义在这里插入图片描述
这里又调用了doGetUrl()
查看这个方法
在这里插入图片描述
HTML出现了,到此,VS Code中Electron的main process流程跟进完成。

至于判断语句中,到底是启动哪个文件,我目前也还是不太清楚。这两个文件html都是相同的,不同的就是js文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值