前端新手关于包依赖的疑问

33 天前
 unco020511

楼主原来是做服务端和 Android 的,包依赖管理都是 gradle/maven,最近团队需要开始接触前端,但我有个疑问,为啥前端的依赖都是类似 "dependencies": {"vue": "^3.0.11"}这样写,这样似乎就没有锁定一个具体版本,执行 install 时会自动去 npm 仓库下载最新的版本(同一个大版本内)

2077 次点击
所在节点    前端开发
33 条回复
yzw716305797
33 天前
1. 一般不会有 bug ,不一般的时候也挺多
2. 会有坑,偶尔会出现本地和线上不一致的情况

把前面的 ^去掉,版本就会锁死,但是也不是完全没问题了,因为依赖的依赖,也可能会出问题
clevercats
33 天前
指定版本"^3.0.11" , 这里面不加^就行了
coldmonkeybit
33 天前
只要 lock 文件是同一份,就不会出现拉取到不同的依赖版本的情况吧
duanxianze
33 天前
和 gradle/maven,写法差不多啊,^+等正则写法,我映像中包括 python,ruby,php,rust 不都是这样的?直接写数字就是指定了
unco020511
33 天前
@yzw716305797 去掉可以锁定版本我倒是知道.既然锁定版本会有坑,为啥大家都这样写呢?我遇到好几个项目好像都是加^.不是特别理解,因为在用 maven 时,都是固定版本的
unco020511
33 天前
@duanxianze 包管理工具应该都有提供类似的机制,但好像大家的习惯(或者说约定)差异很大?比如 Android 开发基本没见过不指定具体版本的情况,前端就很多^这样写,想知道为什么会存在这个差异呢
sibusana
33 天前
@unco020511 如果项目内有 lock 文件,比如 pnpm-lock.yaml 。如果安装之后 lock 文件没有产生修改,可以认为依赖没有变化
lingxiaoli
33 天前
同一个大版本不存在 break change 都是兼容的
ztxcccc
33 天前
lock 文件可以固定版本和下载地址,但是假设说有人用了个私有的地址+偷偷替换掉远程文件,也是有可能的
xwwsxp
33 天前
@duanxianze 它是通过 npm 的 pageage-json.lock 文件来锁定版本的;只要将这个提交到远程 Git 仓库就可以了,也能得到类似 Maven 的方式;但是,前端毕竟属于娱乐圈,开玩笑,升级比较快,很多前端喜欢最新的东西。
unco020511
33 天前
@lingxiaoli 这确实是一个「约定」,但也只是一个「约定」
murmur
33 天前
一般我们是把 node_modules 打包保存,直接发给别人,一劳永逸的解决问题
laobobo
33 天前
有一个 lock 文件,就是用来锁定的
NerbraskaGuy
33 天前
package-lock.json 不就是做这个用的么,package.json 里面锁定直接依赖的包版本,但是如果又依赖其他的包的话可能会出问题,尤其是越大型的项目互相依赖越复杂
laobobo
33 天前
@murmur 我擦,牛啊
wu67
33 天前
"vue": "3.0.11" 只装这个版本, 精确到补丁版本号
"vue": "~3.0.11" 可以装 3.0.* 的最新版本
"vue": "^3.0.11" 可以装 3.* 的最新版本

或者你把 package-lock.json 或者 yarn-lock.json 一起提供.

或者极端一点, 连 node_modules 打包给别人, 但是部分包如果跨平台芯片就没法用了, 例如苹果 m 系列和 window intel...
wu67
33 天前
一般来讲, 经常维护的项目, 用^完全没问题, 出事解决就行. 实在担心就逐步锁定范围.
wangtian2020
33 天前
凉拌,就算锁了版本,别人开发用的浏览器、系统版本、nodejs 不一样也有可能出问题
我就是喜欢安装新版本,出了问题再改回来,一般不出
renmu
33 天前
npm ci 可以使用 lock 文件安装,npm i 是不会的
dongtingyue
33 天前
好心提醒,使用 volta 之类的管理 node ,npm 版本。要不然还是有坑。前端是大坑。

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

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

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

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

© 2021 V2EX