跳转到内容

仓库结构介绍

仓库使用 Nx 管理任务编排,bun workspace 管理依赖,主要目录如下:

  • 文件夹packages/
    • 文件夹core/ 核心组件,Vanilla JS 实现
    • 文件夹react/ 核心组件的 React 绑定
    • 文件夹vue/ 核心组件的 Vue 绑定
    • 文件夹react-full/ 可直接使用的完整播放器组件,仅 React 版本
    • 文件夹ttml/ TTML 解析与处理库
    • 文件夹lyric/ 歌词解析与处理库,TTML 实际依赖 ttml 包
    • 文件夹fft/ Rust + wasm-pack
    • 文件夹ws-protocol/ Rust + wasm-pack
    • 文件夹docs/ Astro + Starlight 文档站
    • 文件夹playground/ 用于开发和测试的示例项目
      • 文件夹core/ 使用核心组件的示例
      • 文件夹react/ 使用 React 绑定的示例
      • 文件夹vue/ 使用 Vue 绑定的示例
      • 文件夹react-full/ 使用完整播放器组件的示例
  • 文件夹.github/
    • 文件夹workflows/
    • 文件夹scripts/

nx.json 中的发布配置包含两个主要 group:

  • core-bundle 三个包版本保持一致:
    • @applemusic-like-lyrics/core
    • @applemusic-like-lyrics/react
    • @applemusic-like-lyrics/vue
  • 其余包版本各自独立:
    • @applemusic-like-lyrics/fft
    • @applemusic-like-lyrics/lyric
    • @applemusic-like-lyrics/react-full
    • @applemusic-like-lyrics/ttml
    • @applemusic-like-lyrics/ws-protocol

你可以在终端执行:

Terminal window
bun nx graph

来查看完整的依赖关系图。

在提升版本号时,如果被依赖的包发生了更新,则依赖它的包也会被自动提升版本号,即使代码没有改动。

Nx 提供了便捷的命令行工具,无需输入 @applemusic-like-lyrics/ 前缀也可执行命令。

例如,要构建 @applemusic-like-lyrics/react 包,可以直接执行:

Terminal window
bun nx build react

Nx 会自动解析依赖,因此会先构建 core 包,然后构建 react 包。

我们在 package/playground 中准备了用于测试的 web app,基于 Vite,具有 HMR 支持。我们从 corereactvuereact-full 中添加了转发,因此要启动对应环境,只需要:

Terminal window
# 启动 package/playground/core 的开发服务器
bun nx dev core
# 下面同理
bun nx dev react
bun nx dev vue
bun nx dev react-full

要构建全部包,执行:

Terminal window
bun build:libs

即可自动并行构建所有包,构建顺序由依赖关系决定。

同理,文档站的别名是 docs,有如下命令:

Terminal window
# 启动文档站开发服务器
bun nx dev docs
# 构建文档站
bun nx build docs

会自动处理依赖关系。