文章目录
参考资料
monorepo 概念
在 Monorepo 模式中,所有相关的项目和组件都被存储在一个统一的代码仓库中,而不是分散在多个独立的代码仓库中,这些项目之间还可能会有依赖关系。
pnpm
- pnpm 支持 monorepo 模式的工作机制叫做 workspace(工作空间)。
- 在代码仓的根目录下存有 pnpm-workspace.yaml 文件指定哪些目录作为独立的工作空间,这个工作空间可以理解为一个子模块或者 npm 包。
- pnpm 通过目录下 package.json 文件的 name 字段来识别仓库内的包与模块的。
rush
参考资料
- 官方文档 https://rushjs.io/zh-cn/pages/maintainer/setup_new_repo/
- 视频 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里定义的命令。
- 原理: