架构

此图展示了Docusaurus如何构建您的应用程序。每个插件收集其内容并生成JSON数据;主题提供布局组件,这些组件接收JSON数据作为路由模块。打包器将所有组件打包并生成服务器包和客户端包。
尽管你(无论是插件作者还是网站创建者)一直在编写JavaScript,但请记住,JS实际上是在不同的环境中运行的:
- 所有插件的生命周期方法都在Node中运行。因此,在我们支持代码库中的ES模块之前,插件源代码必须提供为可以导入的ES模块,或者可以
require的CommonJS。 - 主题代码是使用Webpack构建的。它们可以作为ESM提供——遵循React的约定。
插件代码和主题代码从不直接相互导入:它们仅通过协议进行通信(在我们的例子中,通过JSON临时文件和调用addRoute)。一个有用的思维模型是想象插件不是用JavaScript编写的,而是用另一种语言如Rust编写的。用户与插件交互的唯一方式是通过docusaurus.config.js,它本身在Node中运行(因此你可以使用require并将回调作为插件选项传递)。
在打包过程中,配置文件本身会被序列化并打包,允许主题通过useDocusaurusContext()访问配置选项,如themeConfig或baseUrl。然而,siteConfig对象仅包含可序列化的值(在JSON.stringify()后保留的值)。函数、正则表达式等在客户端会丢失。themeConfig被设计为完全可序列化。