Monorepo+learn+workspaces

343 阅读1分钟

1、Monorepo

一个项目仓库中管理多个模块/包

package "private": true,// 禁止把当前的包发布到npm

multirepo(Multiple Repository) 每一个包对应一个项目

2、Storybook

可视化的组件展示平台 在隔离的开发环境中。以交互式的方式展示组件 独立开发组件

3、yarn workspaces

开启工作区 "private": true, "workspaces": { "packages": [ "service/*" ], 开启工作区以后,通过yarn安装依赖的情况下,如果包内的依赖相同版本的包,会提升到跟目录下的node_modules,如果版本不同,也会在各自包内安装依赖

4、lerna

  • Lerna是一个优化使用git和npm管理多包仓库的工作流工具
  • 用于管理具有多个包的JavaScript项目
  • 它可以一键把代码提交到git和npm仓库

(1)Lerna 参数含义: lerna run 执行每个模块package.json中的脚本命令 scope:packageName的形式运行指定包 parallel:忽略并发和排序,在流式前缀的匹配包运行script

(2)lerna publish 有两种工作模式 fixed/locked mode(默认):每一次发布的时候,全量更新 independent mode:每次publish的时候,会检测文件的变动,只发布有改动的包

(3)yarn本身提供了较lerna更好的依赖分析和提升功能 提升:Yarn workspace可以共享一个node_modules目录,提升开发效率和降低磁盘空间占用

在lerna.json中配置"useWorkspaces": true、"npmClient": "yarn", 在package.json中配置"private": true、"workspaces”:{"packages”:[], "nohoist”:[]}

yarn官方推荐使用yarn来处理依赖安装,用lerna来处理依赖更新和发布的问题 实际在我们的项目中,使用yarn来管理依赖安装,使用lerna管理主子应用运行,主子模块是通过webpack模块联邦进行引用的。