楼主原来是做服务端和 Android 的,包依赖管理都是 gradle/maven,最近团队需要开始接触前端,但我有个疑问,为啥前端的依赖都是类似 "dependencies": {"vue": "^3.0.11"}这样写,这样似乎就没有锁定一个具体版本,执行 install 时会自动去 npm 仓库下载最新的版本(同一个大版本内) 不锁定版本如果新的版本 API 变更或者存在 bug 那怎么办?不锁定版本的话,本地和部署也可能拉取到不同的依赖版本?感觉这样会有坑?当然也可能我的理解不对 感觉大家的解答,懂了一些 lock文件就是解决版本问题的 lock文件的机制我去详细了解下 一个大版本内不会更改api或者引入bug 我理解这只是一个美好的约定,三方库的作者不一定会遵守这个约定 npm ci可以解决部分问题 确实可以解决本地能跑,持续集成/自动化环境不能跑的问题
感觉大家的解答,懂了一些 lock文件就是解决版本问题的 lock文件的机制我去详细了解下 一个大版本内不会更改api或者引入bug 我理解这只是一个美好的约定,三方库的作者不一定会遵守这个约定 npm ci可以解决部分问题 确实可以解决本地能跑,持续集成/自动化环境不能跑的问题
@duanxianze 包管理工具应该都有提供类似的机制,但好像大家的习惯(或者说约定)差异很大?比如 Android 开发基本没见过不指定具体版本的情况,前端就很多^这样写,想知道为什么会存在这个差异呢