V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rookie2luochao
V2EX  ›  程序员

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

  •  
  •   rookie2luochao ·
    rookie-luochao · 168 天前 · 1420 次点击
    这是一个创建于 168 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 主要考虑项目业务的 monorepo 场景
    • 开源多个 npm 包的 monorepo(通过 pnpm + workspace 可以很好的管理,包括 npm 相互依赖的 link 和版本自动更新)

    我能想到的思路:

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

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

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

    这个可以试一下,感觉还是挺好用的 原理也是 pnpm + workspace
    FishStars
        10
    FishStars  
       168 天前
    同 9 楼,使用 trubo 或者 lerna 搭配管理 monorepo
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2779 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 02:14 · PVG 10:14 · LAX 18:14 · JFK 21:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.