前面我们说明了code server是如何把ide作为一个服务提供出去的,code server除了提供服务器功能外,最重要的事情当然就是加载ide内核代码了
Code Server加载vscode内核
我们回顾一下code server加载vscode内核相关的代码,loadAMDModule函数这个方法本质就是一个require,引入了vscode内核代码中的out/bootstrap-amd
这个文件里面的load
方法,然后通过vscode原生的模块加载机制加载vs/server/node/server.main
下的createServer
方法,获取到的createVSServer
方法负责在当前进程里面加载vscode内核代码。
这也就是我们前面架构图上说明的,code server和vscode内核虽然逻辑上独立,但是是存在同一个进程的,vscode内核其实是作为一个模块被code server加载的
src/node/routes/vscode.ts
const createVSServer = await loadAMDModule<CreateServer>("vs/server/node/server.main", "createServer")
this._codeServerMain = await createVSServer(null, {
...(await toCodeArgs(args)),
"without-connection-token": true,
})
export const loadAMDModule = async <T>(amdPath: string, exportName: string): Promise<T> => {
process.env["VSCODE_INJECT_NODE_MODULE_LOOKUP_PATH"] =
process.env["VSCODE_INJECT_NODE_MODULE_LOOKUP_PATH"] || path.join