V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
yantianqi
V2EX  ›  程序员

想问下前端架构方案

  •  
  •   yantianqi · Apr 22, 2020 · 2445 views
    This topic created in 2207 days ago, the information mentioned may be changed or developed.

    想问下,目前前端架构方案

    • 项目 A 引用包 1
    • 项目 B 引用包 1

    1 、包 1 发布 npm,每次都要更新项目 A,B,而且安装在 node_modules 中没有热更新,感觉不太方便。

    2 、最近了解到 lerna,把项目 A 和包 1 作为一个整体的项目,包 1 内容修改后,在项目 B 中好像不能同步更新

    不知道有什么比较好对于多个项目,公用同一个包的方案

    6 replies    2020-04-24 21:06:17 +08:00
    KuroNekoFan
        1
    KuroNekoFan  
       Apr 22, 2020
    lerna 就是 monorepo 的一个实现嘛,其实 monorepo 主要的问题在于如何进行粒度合适的发布了,只从开发角度说肯定比 multirepo 要方便一些
    faceRollingKB
        2
    faceRollingKB  
       Apr 22, 2020   ❤️ 1
    别的框架不清楚,angular 的话使用 library 可以解决,https://angular.io/guide/creating-libraries

    自己组织架构的话可以参考这里面用到的 npm 本地包的配置( https://docs.npmjs.com/cli/link),使用 npm link 链接 library 项目而不是 node_modules
    yhxx
        3
    yhxx  
       Apr 22, 2020
    webpack5 的联合模块可以看一下
    可以一定程度上缓解这个问题
    baxtergu
        4
    baxtergu  
       Apr 22, 2020
    把包 1 单独部署成 umd 的版本,然后 A B 两个项目 external 这个包用 umd 方式引入,就可以实现包 1 在线版本更新后 A 和 B 不用重新编译部署,但是需要注意浏览器的缓存策略。
    SilentDepth
        5
    SilentDepth  
       Apr 22, 2020
    如果接受包 1 更新后重新编译两个项目,npm link 或 yarn workspaces 可解(两个项目引用包 1 的同一个源码副本)。

    如果希望两个项目什么都不用做就能获得包 1 的更新,考虑 @baxtergu #4 的方案吧。
    1340641314
        6
    1340641314  
       Apr 24, 2020
    如果是本地开发的话,可以了解一下: https://www.npmjs.com/package/@fmfe/psync

    指定
    psync --dir=指定你 A 项目的目录 --dir=指定你 B 项目的目录 --dir=指定你其它使用的项目目录
    程序会自动识别依赖关系,进行文件同步,不过笔记可惜的是,目前只支持 mac
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1301 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 17:31 · PVG 01:31 · LAX 10:31 · JFK 13:31
    ♥ Do have faith in what you're doing.