Lock到底好不好?
发布于 7 年前 作者 zhanzhenzhen 6898 次浏览 来自 问答

npm v5出现了package-lock.json,感觉这会污染Git仓库啊,但官方网站上竟然还建议不要把这个文件放入.gitignore内!

16 回复

可能你没遇到版本不匹配的坑。

提出這個疑問說明根本沒明白lock的作用。 為什麼會污染呢?這才是保證依賴統一的鑰匙。

@captainblue2013 我觉得把自动生成的东西放进仓库就是污染。仓库应该只放手工输入的东西。

@zhanzhenzhen 不不不,自動是為了不用你手寫那麼麻煩,你非要自己寫也可以啊。 這個lock的意義就是鎖定目前的版本,尤其是npm這種發佈十分隨意的,不鎖版本很容易以後出問題。 寄希望于其他開發者的素質,還不如自己把握住。

放進倉庫的意義在於,npm會優先根據lock的版本來安裝,這樣你的項目不管在任何地方部署,都能保證安裝同一套版本的依賴。

其他 包管理工具基本都有lock功能,npm算跟進慢了的,現在終於等到了,你不用懷疑它的科學性,只需要自己想明白就是了。

最好还是要lock,至于要不要升级要看你在测试环境下做了升级后对现有功能有没有影响,比如兼容性,性能之类的。

我觉得是需要放进仓库的. java的pom.xml, python的requirements.txt, 都是把依赖和版本写在一起的, npm只是packacge.json没做好, 多了一个lock

ruby里用了很多的best practice,你说呢?

@i5ting 我已开始用npm的时候,就在找类似gem lock的东西,后来找到了shrinkwrap,感觉很类似,但就是没啥人用。后来慢慢发现,原来这东西不好用。现在 package-lock.json 出来,总算是看起来感觉好多了。 但现在 package-lock.json 在腾讯内部我也没开始推(我在负责腾讯的npm仓库),因为这个 lock 文件里面会锁定 registry,导致一些莫名其妙的问题发生,比如通过通过 registry 安装出来的包莫名地指向 npmjs.org,不知是不是哪块缓存有问题。所以我关掉了内部npm客户端的package-lock.json特性。

@alsotang 作为一个框架和类库的维护者,你真的期望推 lock 么? 不担心遇到版本碎片的深坑么?后期你根本不可能推动升级,你会维护一个很长很长的兼容版本,那简直会成为噩梦。

@atian25 我看ruby的包管理工具,大家都是锁版本的。你说的这个碎片化版本的深坑,我之前混ruby社区没怎么听人提起过。 况且升级这事情,【用户是否愿意升级】与【用户是否在不知情的情况下被semver规则升级】本身就是两回事。

@atian25 我对于lock持中立态度

@alsotang 你是手叉腰肌,隔岸观火

我都是不再git中的 不清楚机制 production 环境下不应该和 dev 的一致呀

同不喜欢 Lock,那些坑的出现只能说因为有了 Lock 用户被惯坏了。

个人感觉死马在知乎专栏上的阐述还是比较清楚的。

回到顶部