monorepo 跨项目共享组件和模块,有经验的同学交流一下各种实现思路和优缺点

201 天前
 rookie2luochao

我能想到的思路:

  1. pnpm + workspace ,但是对于抽离的公共业务组件的 import npm package 要如何优雅处理,例如下图

  2. 不用 workspace, 直接用 Inquirer.js+脚本 的方式去读取 packages 里面的每一个项目的 index.ts 启动文件, 所有的依赖都丢到根目录的 package.json 里面,packages 里面的项目都不需要 package.json ,把项目都假想成一个业务模块(每个项目里面都有一个类似于 ReactDom.createRoot 的入口启动项目), 弊端很明显就是 package.json 要维护所有依赖,自己写脚本维护启动和发布

1482 次点击
所在节点    程序员
10 条回复
ygweric
201 天前
共享组件和模块放在一个 package 中,别的 package 的 package.json 中加 dependence 加入依赖,npm i 后,可以直接引用,不会报错,你红色的错误咋回事
rookie2luochao
201 天前
@ygweric 我还没有给共享组件和模块加 package.json ,别的 package 的 package.json 中用 dependence 加入依赖,那共享组件和模块需要打包成 npm 吗?
estk
201 天前
我从来不打包,直接调用 ts
包的入口你可以直接写 src/index.ts 之类的,直接用
estk
201 天前
@estk
不需要像打包那样写 dist/index.js
ygweric
201 天前
@rookie2luochao 不需要,同一个 monorepo 中即可
zhx643
201 天前
我是把公共组件单独放一个 common 目录,项目的 CLI 配置文件里加上 common 的别名
这样引入 import xxx from 'common/components/xxx'
rookie2luochao
201 天前
@estk 好的,学到了,谢谢哈
rookie2luochao
201 天前
@ygweric okok ,学到了,回去搞一下试试
mxcins7
201 天前
https://turbo.build/repo/docs/getting-started/installation

这个可以试一下,感觉还是挺好用的 原理也是 pnpm + workspace
FishStars
200 天前
同 9 楼,使用 trubo 或者 lerna 搭配管理 monorepo

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1047627

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX