V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
pkuphy
V2EX  ›  程序员

前端项目分支切换, npm 包管理问题

  •  
  •   pkuphy · 2020-11-22 02:51:17 +08:00 · 4647 次点击
    这是一个创建于 1496 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请教一下大家,前端项目,如果不同分支的代码依赖的 npm 包版本不一样,怎样方便地在切换分支后,让各分支使用各自相应的 npm 包?

    难道每次切换分支后,都要重新安装一遍依赖吗?

    20 条回复    2021-07-21 16:03:43 +08:00
    kyuuseiryuu
        1
    kyuuseiryuu  
       2020-11-22 03:16:54 +08:00 via iPhone
    你不会把 node_modules 加到版本控制了吧?

    如果没有的话两个分支的依赖都装就好了。

    除非有用到同一个包但不同版本,那就蛋疼了。
    yyfearth
        2
    yyfearth  
       2020-11-22 03:28:15 +08:00
    @kyuuseiryuu 现在前端 node_modules 加 git 里可不太好
    太大了 webpack babel react/vue/angular 什么的 一大堆 可以上 G
    而且每次 npm install 相当多文件会变化

    除非你 npm install 一次之后再也不动 这当然已经不可能了
    yyfearth
        3
    yyfearth  
       2020-11-22 03:28:41 +08:00
    @pkuphy 最简单的办法就是加 githook checkout 的时候自动 npm i
    yyfearth
        4
    yyfearth  
       2020-11-22 03:30:06 +08:00
    @kyuuseiryuu LZ 说的就是同样的包版本不一样 这个太常见了
    luob
        5
    luob  
       2020-11-22 03:59:38 +08:00
    一个简单的方法:

    新分支正常使用,给老分支全局替换一个 alias

    npm i my-package-1@npm:[email protected]

    - import MyPackage from "my-package"
    + import MyPackage from "my-package-1"
    kyuuseiryuu
        6
    kyuuseiryuu  
       2020-11-22 04:12:29 +08:00 via iPhone
    @yyfearth 😂没注意到,我🦐了
    seki
        7
    seki  
       2020-11-22 05:01:10 +08:00
    当然是每次再安装一遍了

    如果想要做得自动化一点的话,可以用 husky 这样的加 git hooks,感觉 post-checkout 和 post-merge 应该就满足了
    Rheinmetal
        8
    Rheinmetal  
       2020-11-22 07:37:01 +08:00
    yarn2 的 plug and play 可以提交依赖 然而支持的包不是很多 也没有适配脚手架
    shenyu1996
        9
    shenyu1996  
       2020-11-22 09:02:37 +08:00 via Android
    分俩文件夹 当成两个项目维护
    yangtze
        10
    yangtze  
       2020-11-22 09:06:17 +08:00 via iPhone   ❤️ 1
    git worktree 了解一下,专门应对多分支同时开发的场景
    crysislinux
        11
    crysislinux  
       2020-11-22 09:53:50 +08:00 via Android
    有时候是会有这种情况,比如升级主体框架,但同时又在之前版本基础上修 bug 。切了就要 install 蛮不爽的,我选择直接 copy 一份单独开发。
    fhsan
        12
    fhsan  
       2020-11-22 10:09:40 +08:00
    我选择 nvm use + zsh
    revalue
        13
    revalue  
       2020-11-22 10:21:43 +08:00
    @yangtze 不同分支之间,npm 包要重装。我试过
    1OF7G
        14
    1OF7G  
       2020-11-22 10:38:35 +08:00
    如果分支比较固定的情况,可以使用 git worktree 。
    lin07hui
        15
    lin07hui  
       2020-11-22 10:54:47 +08:00
    cwliang
        16
    cwliang  
       2020-11-22 12:14:38 +08:00
    yarn 重新装一遍,个别包版本不一样,也就两秒种的事
    pkuphy
        17
    pkuphy  
    OP
       2020-11-22 17:32:52 +08:00
    @shenyu1996
    > 分俩文件夹 当成两个项目维护

    我之前就采用这样的方式,想着或许社区有更优雅的解决办法。

    ---
    切换分支后重新安装,有时候一些祖传 npm 包不小心升级后 API 发生变化,会带来很多让人头疼的麻烦。
    pkuphy
        18
    pkuphy  
    OP
       2020-11-22 17:40:52 +08:00
    @yangtze 多谢提示,git worktree 看起来是一个好方法。
    KuroNekoFan
        19
    KuroNekoFan  
       2020-11-22 21:17:13 +08:00
    是的,重新安装一遍,反正很快
    lifesimple
        20
    lifesimple  
       2021-07-21 16:03:43 +08:00
    我也遇到这个问题,不过我觉得可以安装多个版本的同一个包 用别名区分
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1348 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 17:37 · PVG 01:37 · LAX 09:37 · JFK 12:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.