本文档提供了 Redux 库本身的构建系统、开发工作流程和 CI/CD 流水线的技术概述。它旨在为 Redux 代码库的贡献者以及对 Redux 如何开发、构建和发布感兴趣的人士提供帮助。有关如何在应用程序中使用 Redux 的信息,请参阅Redux 概述或核心 Redux API。
Redux 使用基于 TypeScript 的构建系统,该系统从单一来源生成多种分发格式,确保在不同 JavaScript 环境中的兼容性。
来源:package.json26-36 tsup.config.ts1-97
Redux 采用现代的包结构,支持多种 JavaScript 模块格式和 TypeScript 类型。
此配置使得
Redux 使用 tsup 来编译和打包库。配置定义在 tsup.config.ts 中,并生成针对不同环境的多种输出格式。
| 格式 | 文件模式 | 目的 |
|---|---|---|
| 现代 ESM | dist/redux.mjs | 适用于支持 ES 模块的现代环境 |
| 传统 ESM | dist/redux.legacy-esm.js | 用于 Webpack 4 兼容性(指向 module 字段) |
| CommonJS | dist/cjs/redux.cjs | 适用于 Node.js 和旧版打包器 |
| 浏览器 ESM | dist/redux.browser.mjs | 针对浏览器优化(已压缩,生产模式) |
| TypeScript | dist/redux.d.mts | TypeScript 项目的类型定义 |
Redux 开发工作流程通过 package.json 中的 npm 脚本定义。
| 命令 | 目的 |
|---|---|
yarn clean | 移除 dist 目录 |
yarn format | 使用 Prettier 格式化代码 |
yarn lint | 使用 ESLint 进行代码检查 |
yarn test | 使用 Vitest 运行测试并进行类型检查 |
yarn build | 清理并构建包 |
yarn test:watch | 在监视模式下运行测试 |
yarn test:cov | 运行带有覆盖率报告的测试 |
Redux 使用 GitHub Actions 进行持续集成,并定义了多个工作流程以确保代码质量和兼容性。
CI 过程包括
are-the-types-wrong 检查包配置来源:.github/workflows/test.yaml1-250
Redux 监控拉取请求中的包大小变化
来源:.github/workflows/size.yaml1-17
Redux 通过 GitHub Actions 触发的手动工作流程发布到 npm。
发布过程的关键特性
来源:.github/workflows/publish.yaml1-25
Redux 文档使用 Docusaurus 构建并部署在 Netlify 上。有关文档系统的更多信息,请参阅Redux 文档系统。
Redux 使用 TypeScript 进行开发,并为不同目的提供了多个配置文件。
TypeScript 配置提供
来源:tsconfig.json1-12 tsup.config.ts9
Redux 使用 Yarn 4.4.1 作为其包管理器,并附带特定配置。
来源:.yarnrc.yml1-8 package.json85
Redux 仓库的组织结构如下
关键配置文件
package.json:包定义和脚本tsup.config.ts:构建配置tsconfig.json:TypeScript 配置.eslintignore:ESLint 忽略模式.gitignore:Git 忽略模式.yarnrc.yml:Yarn 配置netlify.toml:Netlify 部署配置来源:package.json1-86 .gitignore1-37
Redux 使用 Vitest 进行测试,支持多种测试模式。
测试命令包括
yarn test:运行测试并进行类型检查yarn test:watch:以监视模式运行测试yarn test:cov:运行测试并生成覆盖率报告yarn type-tests:运行 TypeScript 特定测试Redux 的开发和构建系统旨在生成一个高质量、广泛兼容且具备强大测试和分发能力的库。它利用现代 JavaScript 工具,同时保持与各种环境的兼容性,确保 Redux 可以在几乎任何 JavaScript 项目中使用,无论其模块系统或打包器选择如何。
TypeScript 用于类型安全,多种输出格式用于兼容性,全面的测试以及自动化的 CI/CD 工作流程相结合,有助于保持 Redux 用户所期望的可靠性和性能。
来源:package.json1-86 tsup.config.ts1-97 .github/workflows/test.yaml1-250