深入浅出 solid.js 源码 (四)—— 源码结构

2,310 阅读2分钟

这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情

这一节开始我们来看 solis.js 的源码,github 的地址 github.com/solidjs/sol… monorepo 的仓库,里面包含了 solid.js 相关的几个核心 npm 包,此外在 solidjs 组织号下面还有一些其他的 npm 包,这里我们首先来看 solis.js 主仓库。可以直接访问 github.dev/solidjs/sol… 打开 solid.js 的仓库,在线阅读源码非常方便。

首先来看工程结构。这个工程是基于 lerna 实现的 monorepo,下面的多个包都位于 packages 目录下,目前下面有五个仓库

  • solid 是 solid.js 的核心,里面包含了 solid.js 基础能力的实现,如果和 react 仓库对比一下会很直观的感受到,solid 的仓库非常小,内容很少,框架本身没有历史包袱,代码没有冗余。
  • solid-element 是 WebComponents 相关,为 solid.js 封装了 WebComponents 的能力。
  • solid-ssr 和 ssr 相关,提供了一些 ssr 渲染的辅助工具。
  • babel-preset-solid 是 babel 实现,主要是 jsx 转化相关内容。
  • test-integration 是一些测试相关内容,这里不需要关注。

因此我们其实这里主要只看 solid 一个仓库就够了,不过还需要关注它的依赖,在 package.json 中有一个比较重要的依赖是 dom-expressions,这也是 solid.js 的作者开发的一个 npm 包,内部实现了 DOM 相关的操作,solid 的很多重要能力离不开这个库,因此这个也需要作为 solid.js 的一部分来一起阅读。

此外还有一些其他依赖或者一些相关的库也需要了解,比如响应式实现部分参考了 S.js,这类依赖后面会在阅读过程中慢慢发现。

工程结构部分需要关注的就这么多,接下来要从 solid.js 的入口开始入手,逐步深入源码内部,源码内部逻辑分 client 和 server 两部分,分别对应 csr 和 ssr 实现,这里前期阅读会先默认跳过 ssr 实现。