# pg-kit-monorepo **Repository Path**: front-learn/pg-kit-monorepo ## Basic Information - **Project Name**: pg-kit-monorepo - **Description**: todo => pnpm monorepo project manage, turo任务编排 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-05-26 - **Last Updated**: 2023-06-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README pnpm 前置命令知识 ``` 在任意层级的工程目录中,运行此命令,包会安装在工作空间的根目录里,这里是在开发依赖中 $ pnpm add lodash-es -Dw 在任意层级的工程目录中,运行此命令,包会安装在工作空间的根目录里,这里是在生产依赖中 $ pnpm add dz-transform -w 在任意层级的工程目录中,运行此命令,包会安装在指定的子工程目录下,这里是在生产依赖中 $ pnpm add qs --filter @dztest/pkg-one 在任意层级的工程目录中,运行此命令,包会安装在指定的子工程目录下,这里是在开发依赖中 $ pnpm add @types/qs --filter @dztest/pkg-one -D pnpm -r, --recursive 别名:m, multi, recursive, -r 与以下命令一起使用时,在工作区的每个项目中运行命令:install 基于 pnpm 提供的 workspace:协议,可以方便的在 packages 内部进行互相引用 $ pnpm add @dztest/pkg-one --filter @dztest/pkg-two ``` 创建 workspace ``` pnpm init ``` 根目录创建 pnpm-workspace.yaml ``` packages: - "apps/**" - "projects/**" ``` 2、安装依赖 根目录就可以指定安装子包的依赖 F, --filter 可以指定目标 package 执行任务 ``` pnpm i -F core ``` 那问题来了,如果多个包都配置好了依赖,想要一键安装怎么办,一个一个包去这样做吗? -r, --recursive 命令可以做到一键递归安装 ``` pnpm i -r ``` 工作区依赖安装 main 应用里安装工作区里的 core 包 ``` pnpm add core -D --workspace --filter main ``` ``` "devDependencies": { "core": "workspace:^", // * 代表默认同步最新版本,正常安装完应该是 ^1.0.0 "typescript": "^5.0.4" } ``` > 全局安装 -w: --workspace-root ``` pnpm add typescript -D -w ``` > 局部安装 ``` pnpm add typescript -D --filter main ``` ts 配置文件, root 目录新建一个 tsconfig.base.json 里面保留一些通用的,其余项目中的 tsconfig.json 直接继承即可 使用 Turborepo 优化构建 我们使用它主要是用来解决项目之间的依赖关系,编排构建顺序 局安装 pnpm add turbo -Dw,项目根目录新建 turbo.json ``` { "$schema": "https://turbo.build/schema.json", "pipeline": { "build": { "dependsOn": ["^build"], "outputs": ["dist/**"] }, "lint": { "dependsOn": ["build"] }, "test": { "dependsOn": ["build"], "inputs": ["src/**/*.tsx", "src/**/*.ts", "test/**/*.ts"] }, "dev": { "dependsOn": ["lint"] } } } ``` $schema:定义了 json 的类型,类似于 ts 对于 js 的约束 dependsOn:表示当前命令所依赖的相关流程 pipeline.build:表示当执行 turbo build 时会预先执行 ^build, ^build 就是所有项目的 package.json 里的那个 build 脚本,^ 是一个标记。如果像 lint 中的 build,他就指的是 pipeline 中的第一个 build 命令。 outputs:指定缓存输出目录 inputs: 配置的目录下文件有变化,才会重新执行此命令 apps 下通过 vite 再新建个项目 ``` pnpm create vite ``` turbo build 就会一键拉起所有项目的 build 脚本。 --- 在创建的项目中可以删除 tsconfig.node.json 修改 tsconfig.json { "extends": "../../tsconfig.base.json", "include": ["./*.ts", "./**/*.ts"] } 进行继承根目录的配置