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

2020-11-22 02:51:17 +08:00
 pkuphy

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

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

4647 次点击
所在节点    程序员
20 条回复
kyuuseiryuu
2020-11-22 03:16:54 +08:00
你不会把 node_modules 加到版本控制了吧?

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

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

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

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

npm i my-package-1@npm:my-package@1.0

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

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

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

---
切换分支后重新安装,有时候一些祖传 npm 包不小心升级后 API 发生变化,会带来很多让人头疼的麻烦。
pkuphy
2020-11-22 17:40:52 +08:00
@yangtze 多谢提示,git worktree 看起来是一个好方法。
KuroNekoFan
2020-11-22 21:17:13 +08:00
是的,重新安装一遍,反正很快
lifesimple
2021-07-21 16:03:43 +08:00
我也遇到这个问题,不过我觉得可以安装多个版本的同一个包 用别名区分

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

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

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

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

© 2021 V2EX