从开始到窗口加载
与所有的Electron应用一样,入口点在 package.json文件中定义。
"main": "./out/main",
说明了入口文件在 out/main.js. 这个是编译出来的文件,源文件在 src/main.js。
注意对于TS文件,由于有sourcemap的映射,我们在ts中打断点就可以跳转过来。这里的js应该是编译时候直接拷贝到out目录下的,我们在src下面的文件打断点无效,应该直接在out/main.js中断点。这样使用launch vscode (Main process)的时候,断点就可以命中。这个是程序的主要入口。
类似于Electron的启动,看app的定义:
const app = require('electron').app;
还有对于Ready的事件监听函数:
app.once('ready', function () {
其中会调用 onReady() 函数。其中定义了一个startup函数,后续会根据配置的不同用不同的参数调用这个startup,但只是不同方式的启动而已。我们只需要关注 startup中的启动代码:
require('./bootstrap-amd').load('vs/code/electron-main/main', () => {
perf.mark('didLoadMainBundle');
});
这里用代码调用amd的方式来加载 vs/code/electron-main/main 模块。查看这个文件,
开头有一行import 'vs/code/code.main';,狐疑地查看了一下,只有一行import 'vs/platform/update/node/update.config.contribution'; 其中似乎是一个配置update的东西,看起来与主流程无关,先不管。奇怪这里命名为什么也叫 code.main,搞得人很紧张。
继续来看 main.ts. 文末都写了,这是主入口:
// Main Startup
const code = new CodeMain();
code.main();
在main.ts的startup中,会注册一个instan