对于流行的博客网站ghost,其项目中使用了
monorepo
。对于这个好奇,初步了解下,monorepo
对于项目中起到具体什么作用
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
//根目录的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文件
- 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"
注意:后续命名都是@+根目文件名去作为前缀