monorepo (Monolithic Repository) pnpm rush

文章目录

参考资料

  1. 为什么 pnpm+monorepo 是组件库项目的最佳实践
  2. ytb
  3. b站

monorepo 概念

在 Monorepo 模式中,所有相关的项目和组件都被存储在一个统一的代码仓库中,而不是分散在多个独立的代码仓库中,这些项目之间还可能会有依赖关系。

pnpm

  1. pnpm 支持 monorepo 模式的工作机制叫做 workspace(工作空间)。
  2. 在代码仓的根目录下存有 pnpm-workspace.yaml 文件指定哪些目录作为独立的工作空间,这个工作空间可以理解为一个子模块或者 npm 包。
  3. pnpm 通过目录下 package.json 文件的 name 字段来识别仓库内的包与模块的。

rush

参考资料

  1. 官方文档 https://rushjs.io/zh-cn/pages/maintainer/setup_new_repo/
  2. 视频 https://www.youtube.com/watch?v=m9wbfr8vfDk

创建

javascript 复制代码
npm install -g @microsoft/rush

创建一个空目录 0201_monorepo 
然后 cd 0201_monorepo 
~/my-repo$ rush init
  • rush.json Rush 内主要的配置文件
javascript 复制代码
{
  "rushVersion": "5.61.0",
  "npmVersion": "7.5.0",
  "nodeSupportedVersionRange": "[12.0.0, 16.0.0)",
  "packageManager": "npm",
  "projects": [
    {
      "packageName": "@my-org/project-1",
      "projectFolder": "projects/project-1"
    },
    {
      "packageName": "@my-org/project-2",
      "projectFolder": "projects/project-2"
    }
  ]
}
  • projects

    类型: 数组

    描述: 这是一个包含所有子项目的数组。每个项目都会有自己的 package.json 文件,并且它们都必须在 rush.json 中列出。Rush 会基于此数组来管理依赖、构建和发布等操作。
    每个项目对象需要包含以下字段:

    packageName: 项目的包名,通常是 NPM 包名(例如 @my-org/project-1)。

    projectFolder: 项目文件夹路径,相对于 Monorepo 根目录。例如,projects/project-1。

  • shouldPublish 指定项目是否应该被发布到 npm registry

  • projectFolder 项目在 monorepo 中的相对路径

  • decoupledLocalDependencies 声明项目的本地依赖(其他 monorepo 内的项目)

  • tags 为项目添加标签,用于分类和过滤

    支持通过标签筛选项目(如 rush build --to tag:live-agency )

  • subspaceName 项目所属的子空间名称

命令

rush -h

rush:这是 Rush.js 的主要命令行工具,负责管理 monorepo 中的多个项目的生命周期任务(如构建、安装依赖、发布等)。

rushx:这是一个快捷工具,帮助你执行 npm run <script> 脚本命令,它会处理 monorepo 中多个子项目的环境和依赖关系,确保命令能够正确地运行在合适的项目目录中。是一个简化工具,用于在 monorepo 中运行各个子项目的 npm 脚本。它可以让你在根目录中方便地执行不同子项目的脚本rushx test --to project-a # 运行 project-a 中的 test 脚本

补充知识

  • node

    • node 是执行 JavaScript 代码的引擎。它可以用来运行你的 JavaScript 文件,特别是那些在服务器端运行的代码。
    • node index.js:直接运行 index.js 文件。
  • tsc 命令

    • 全称:TypeScript Compiler(TypeScript 编译器)
    • 作用:把 TypeScript (.ts) 文件编译成 JavaScript (.js) 文件。
    • 常见用法:tsc index.ts 会把 index.ts 编译成 index.js
    • 安装方式:
      • 全局安装:npm install -g typescript
      • 项目内安装:npm install typescript --save-dev
  • npm

    • npm(Node Package Manager)是 Node.js 的官方包管理工具。
    • 主要用于
      • 安装和管理依赖包
      • 管理项目中的依赖(通过 package.json)
      • 运行在项目中定义的脚本(通过 npm run)
  • npx

    • 全称:Node Package Execute(节点包执行器)
    • 作用:npx 是 npm 5.2+ 版本开始引入的工具,它是用来执行 Node 包的命令。临时运行某个 npm 包,无需全局或本地安装,自动下载并执行没有全局安装的包
    • 场景:运行一次性工具或脚本(比如创建项目、执行某些命令行工具)。
    • 用法举例:npx create-react-app my-app
    • npx tsc通常情况下,我们会通过 npx 来运行 TypeScript 编译器,这样即使你没有全局安装 TypeScript,npx 也会自动帮你执行。
  • npx tsc

    • 使用 tsconfig.json 配置文件:如果在当前目录下有 tsconfig.json 文件,npx tsc 会按照该配置文件中的规则来编译 TypeScript 文件。tsconfig.json 文件指定了要编译的文件、输出目录、编译选项等。
    • 如果没有 tsconfig.json 文件:如果没有 tsconfig.json 文件,npx tsc 会默认编译当前目录下的所有 .ts 文件并生成对应的 .js 文件(通常会在当前目录下)。
  • npm run 为什么能启动项目?

    • 原理:npm run 会执行 package.json 里的 scripts 里定义的命令。
相关推荐
青茶3602 小时前
php怎么实现订单接口状态轮询请求
前端·javascript·php
鹏北海2 小时前
micro-app 微前端项目部署指南
前端·nginx·微服务
发现一只大呆瓜2 小时前
虚拟列表:从定高到动态高度的 Vue 3 & React 满分实现
前端·vue.js·react.js
css趣多多2 小时前
add组件增删改的表单处理
java·服务器·前端
证榜样呀2 小时前
2026 大专计算机专业必考证书推荐什么
大数据·前端
蓝帆傲亦3 小时前
前端性能极速优化完全指南:从加载秒开体验到丝滑交互
前端·交互
鱼毓屿御3 小时前
如何给用户添加权限
前端·javascript·vue.js
JustHappy3 小时前
「web extensions🛠️」有关浏览器扩展,开发前你需要知道一些......
前端·javascript·开源
何中应3 小时前
nvm安装使用
前端·node.js·开发工具