
typescript-eslint 官网构建指南基于 Docusaurus 的文档站点开发、构建与 Netlify 部署【免费下载链接】typescript-eslint:sparkles: Monorepo for all the tooling which enables ESLint to support TypeScript项目地址: https://gitcode.com/GitHub_Trending/ty/typescript-eslinttypescript-eslint 的官方文档站packages/website是一个基于 Docusaurus 构建的现代静态网站承载了快速上手教程、全部规则文档、FAQ、博客以及在线 Playground 等核心内容。本文以该目录下的 README 为主线结合仓库中的 docusaurus.config.mts、package.json、netlify.toml 等配置文件系统讲解从安装依赖、本地开发、生产构建到 Netlify 自动部署的完整链路并深入剖析多文档实例、规则文档自动生成、FAQ 结构化数据、PWA 与重定向等实现细节帮助读者理解一个大型开源项目是如何组织和运维其官方文档站的。网站概览与技术栈packages/website是 typescript-eslint Monorepopnpm-workspace.yaml中的一个独立包它的使命是把整个项目的文档、规则、博客和可交互示例聚合为一个对外发布的网站静态站点生成器Docusaurus 3.10.x以现代 React 组件驱动文档与博客页面包管理器与任务编排仓库使用pnpm站点脚本通过Nx统一调度见 package.json依赖自举站点的 Parser、规则插件、Scope Manager、TypeScript ESTree 等均以workspace:*形式直接依赖 Monorepo 内的兄弟包确保文档与代码版本始终一致部署平台Netlify生产环境从独立分支自动发布PR 自动生成预览部署。从 docusaurus.config.mts 可以看到站点的核心元信息标题typescript-eslint标语 Powerful static analysis for JavaScript and TypeScript.正式域名https://typescript-eslint.io根路径baseUrl: /。安装依赖README 给出的安装命令只有一行pnpm install在类型安全方面需要说明的是这一步是在Monorepo 根目录执行pnpm install或pnpm -w相关命令来一次性安装全部 workspace 依赖而并非进入packages/website后单独安装。由于站点大量使用了workspace:*协议链接内部包根目录安装完成后各包之间的符号链接即被建立随后start和build等脚本依赖的构建产物才能被正确解析。安装完成后网站相关的脚本都定义在 packages/website/package.json脚本实际执行命令用途startpnpm -w run start由根工作区转发启动本地开发服务器buildpnpm exec nx build通过 Nx 构建生产静态产物servedocusaurus serve本地预览已构建的静态产物cleardocusaurus clear清理 Docusaurus 缓存cleanrimraf dist/ build/ .docusaurus/ pnpm run clear完整清理构建产物与缓存swizzledocusaurus swizzle弹出/自定义 Docusaurus 主题组件typecheckpnpm -w exec nx typecheck全仓库类型检查stylelintstylelint src/**/*.css检查站点样式文件generate-website-dtstsx ./tools/generate-website-dts.mts生成站点专用的类型声明本地开发热更新与浏览器即时预览执行pnpm run startDocusaurus 会启动一个本地开发服务器并自动打开浏览器窗口。README 强调Most changes are reflected live without having to restart the server.大多数改动会实时生效无需重启服务器——这是 Docusaurus 开发模式的热更新HMR特性修改 Markdown/MDX 文档、React 组件或配置后页面会增量刷新。从仓库的 Nx 配置可以看到该命令实际执行的是docusaurus start并且它的dependsOn: [^build]package.json意味着启动前会先确保依赖它的上游包Parser、eslint-plugin 等的构建产物已经就绪——这也是 Monorepo 中站点能直接引用各包最新代码的关键。一个值得注意的细节站点通过 webpack.plugin.js 在构建时把typescript声明为window.ts外部依赖并通过DefinePlugin注入ESLINT_VERSION、SUPPORTED_TYPESCRIPT_VERSIONS、TS_ESLINT_VERSION、TS_VERSION等运行时版本常量同时把typescript-eslint/website-eslint的编译产物拷贝到./sandbox/。这正是网站上Playground在线演示功能能够在前端浏览器内实时运行 ESLint 规则的原因。生产构建与产物pnpm run build该命令会执行docusaurus build生成纯静态内容到build目录。Nx 侧的 target 定义package.json显示outputs除了{projectRoot}/build之外还包括{projectRoot}/data和{projectRoot}/static/img/ogdependsOn: [^build]要求先构建全部上游 workspace 包构建任务开启 Nx 缓存cache: true未变更时可复用之前的构建结果加速。由于站点启用了 Docusaurus 的future.faster实验性加速ssgWorkerThreads生产构建会利用多线程 SSG 提升大批量页面尤其是 150 条规则文档的生成速度。构建完成后build目录即可交给任何静态内容托管服务Netlify、Vercel、Nginx、对象存储等对外提供访问。部署Netlify 生产环境README 明确指出生产环境由website分支驱动通过 Netlify 自动部署每当有新的稳定版本发布通常每周一次website分支就会从main分支更新。也就是说文档站的发布节奏与版本发布节奏解耦但强关联——只有 stable 版本发布时才会刷新线上文档。netlify.toml 配置仓库根目录下的 netlify.toml 是 Netlify 的文件化构建配置[build] base publish packages/website/build command NX_VERBOSE_LOGGINGtrue pnpm exec nx build website三个关键字段的含义base构建目录相对仓库根目录的偏移空字符串表示在仓库根目录执行命令publish对外发布的静态目录即packages/website/buildcommandCI 上的实际构建命令开启NX_VERBOSE_LOGGINGtrue便于排查 Nx 调度问题。重定向规则netlify.toml中还用[[redirects]]声明了一批 301 重定向用于兼容历史 URL例如/docs→/getting-started/docs/*→/:splat将所有旧/docs/...路径泛化映射到新路径与此同时docusaurus.config.mts 中docusaurus/plugin-client-redirects也维护了一份更细粒度的客户端重定向表如/linting/typed-linting→/getting-started/typed-linting、/troubleshooting/formatting→/users/what-about-formatting。两份配置互为补充Netlify 层处理请求级的永久重定向Docusaurus 插件层则在 SPA 内部完成路由跳转确保老链接与书签不失效。多版本文档的公告条站点会在解析器大版本落后于CURRENT_MAJOR_VERSION环境变量时自动在页面顶部渲染旧版本文档不再维护的公告条docusaurus.config.mts引导用户访问最新版文档。这是文档站支撑历史大版本归档的一种工程化做法。Pull Requests 自动预览部署README 提到Each pull request into themainbranch will have a unique preview deployment generated for it.每一个合入main的 PR 都会生成一个独立的预览部署。这是 Netlify 的 Deploy Previews 功能对每个 PR 分支生成一个带唯一 URL 的临时环境用于在合并前审查文档排版、链接完整性以及规则文档的渲染效果。值得补充的是预览部署同样走netlify.toml的构建配置因此预览环境与生产环境在构建行为上保持一致。加上 Docusaurus 配置中的onBrokenLinks: throw与markdown.hooks.onBrokenMarkdownLinks: throwdocusaurus.config.mts任何失效链接都会直接导致构建失败从而在 PR 预览阶段就能拦截文档链接错误。站点结构深度解析除 README 所述的基础工作流外仓库源码还揭示了文档站的组织方式便于贡献者快速定位文档写在哪儿、如何被渲染。双文档实例Docusaurus 配置中注册了两个docusaurus/plugin-content-docs实例实例 ID文档源目录路由前缀侧边栏rules-docspackages/eslint-plugin/docs/rules规则文档/rulessidebar.rules.jsbase-docsdocs根目录文档/sidebar.base.js这意味着规则文档直接来源于eslint-plugin包的docs/rules目录规则源码与文档保持在同一个包内而快速上手、用户指南、开发者指南、维护手册等站点主文档则统一放在仓库根的docs目录。规则侧边栏由 sidebar.rules.js 在运行时读取typescript-eslint/eslint-plugin导出的rules对象动态生成——新增一条规则后侧边栏会自动出现无需手工维护列表。规则文档自动注入plugins/generated-rule-docs/index.ts 是一个 MDX 处理插件在构建期对每篇规则文档执行一系列自动注入插入规则描述、补充何时不使用它、从规则元数据生成选项表格、为扩展自 ESLint 核心的规则追加基础规则引用并给代码块附加可复制运行的 ESLint 哈希标识。因此规则文档的血肉由维护者撰写而骨架信息选项、extends 关系、资源链接由构建流水线自动补齐保证文档与规则 schema 永远同步。FAQ 结构化数据SEOplugins/faq-data/index.ts 会扫描 FAQ 页面的 H2/H3 标题把每个问题生成schema.org/FAQPage的 JSON-LD 结构化数据注入页面head便于搜索引擎把 FAQ 内容展示为富媒体结果。这也是站点为易检索、易被 Agent/LLM 理解所做的基础设施之一。Typedoc 自动生成 API 文档配置中为ast-spec、project-service、rule-schema-to-typescript-types、tsconfig-utils、type-utils五个包逐一配置了docusaurus-plugin-typedocdocusaurus.config.mts构建时从各包src/index.ts生成 API 参考文档并输出到docs/packages/包名/generated配合rule-schema-to-typescript-types把规则 JSON Schema 编译成 TypeScript 类型形成源码即文档的闭环。PWA 与离线能力配置中的docusaurus/plugin-pwadocusaurus.config.mts为站点启用了 PWA 能力离线模式激活策略包括appInstalled安装后、queryString带特定查询参数与standalone独立窗口模式并配置了 manifest、favicon、Apple touch icon 等全套元信息。访问https://typescript-eslint.io时浏览器即可安装为渐进式 Web 应用。常见命令速查场景命令说明安装依赖pnpm install仓库根目录安装 Monorepo 全部 workspace 依赖本地开发pnpm run start启动开发服务器改动热更新自动打开浏览器生产构建pnpm run build生成静态产物到packages/website/build预览构建产物pnpm run serve本地以生产模式伺服build目录清理缓存pnpm run clean删除dist/ build/ .docusaurus/并清理 Docusaurus 缓存类型检查pnpm run typecheck校验站点及全仓库类型样式检查pnpm run stylelint检查src/**/*.css样式规范小结typescript-eslint 官方文档站是一个典型的工程化文档站样板以 Docusaurus 为渲染引擎借助 pnpm workspace Nx 与整个 Monorepo 深度绑定规则文档、API 文档、FAQ 结构化数据均由构建流水线从源码自动生成生产环境通过website分支 netlify.toml实现按版本节奏自动发布PR 预览环境则让每次改动在上线前都能被完整验证。对于希望为开源项目搭建高质量文档站、或想理解 Docusaurus 高级用法的开发者packages/website 目录下的配置与插件代码是一份非常值得研读的参考资料。【免费下载链接】typescript-eslint:sparkles: Monorepo for all the tooling which enables ESLint to support TypeScript项目地址: https://gitcode.com/GitHub_Trending/ty/typescript-eslint创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考