monorepo简单使用

91 阅读2分钟

对于流行的博客网站ghost,其项目中使用了monorepo。对于这个好奇,初步了解下,monorepo对于项目中起到具体什么作用

image.png

1、monorepo

将不同的项目的代码放在同一个仓库中的软件开发方法,同时可以多个项目间可以共享使用公共项目,也可以共用一套代码配置。

最简单eg:对于多个项目app、vue、react项目,都有使用一些基础方法。我们可以把这些共同的方法,提取出来放到utils里,这样就可以避免多次书写。同时可以保证一个地方修改,多个项目都生效

2、优势

  • 集中管理和协调代码,实现代码共享
  • 依赖变得简单
  • 避免重复安装包,减少磁盘空间

3、测试案列(针对于pnpm)

  • 1、创建项目test-monorepo
  • 2、在根项目创建pnpm-workspace.yaml文件
packages:
  - "packages/*"
  - "apps/*"
  • 3、创建对应文件目录apps/app,packages/util,同时初始化对应及package.json

image.png

//根目录的package.json
{
  "name": "test-monorepo",
  "type": "module",
  "private":true,
  "version": "1.0.0",
  "description": ""
}
//apps/app的package.json
{
  "name": "@test-monorepo/app",
  "type": "module",
  "private": true,
  "version": "1.0.0",
  "description": "",
  "main": "index.js"
}
//packages/util的package.json
{
  "name": "@test-monorepo/util",
  "type": "module",
  "private":true,
  "version": "1.0.0",
  "description": "",
  "main": "index.js"
}

  • 4、编写对应脚本代码测试
//packages/util的index.js
export function sayHello(name) {
    console.log(name);
}
//apps/app的index.js
import { sayHello } from "@test-monorepo/util";
function main() {
    sayHello(1);
}
main();
//可以指定项目中单独添加util包
cd apps\app
pnpm add @test-monorepo/util -w
node index.js
//发现会正常输出1,且只在自己项目app里添加node_modules文件

image.png

  • 5、后期为了方便,可以在根目录上直接安装包,方便各个项目使用
//1、删除各个项目中的node_modules文件,及package.json中的dependencies
//2、在根目录的package.json编写对应脚本
  "scripts": {
    "app":"cd apps/app && node index.js"
  }
// 3、直接在根目录 运行 pnpm add @test-monorepo/util -w
// 4、运行指令 pnpm run app
// 5、会正确输出"1"

image.png

注意:后续命名都是@+根目文件名去作为前缀

4、参考