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

查看 249|回复 27
作者:unco020511   
楼主原来是做服务端和 Android 的,包依赖管理都是 gradle/maven,最近团队需要开始接触前端,但我有个疑问,为啥前端的依赖都是类似 "dependencies": {"vue": "^3.0.11"}这样写,这样似乎就没有锁定一个具体版本,执行 install 时会自动去 npm 仓库下载最新的版本(同一个大版本内)
  • 不锁定版本如果新的版本 API 变更或者存在 bug 那怎么办?
  • 不锁定版本的话,本地和部署也可能拉取到不同的依赖版本?感觉这样会有坑?
  • 当然也可能我的理解不对

    感觉大家的解答,懂了一些
    lock文件就是解决版本问题的
    lock文件的机制我去详细了解下
    一个大版本内不会更改api或者引入bug
    我理解这只是一个美好的约定,三方库的作者不一定会遵守这个约定
    npm ci可以解决部分问题
    确实可以解决本地能跑,持续集成/自动化环境不能跑的问题
  • yzw716305797   
    感觉大家的解答,懂了一些
  • lock文件就是解决版本问题的

    lock文件的机制我去详细了解下
  • 一个大版本内不会更改api或者引入bug

    我理解这只是一个美好的约定,三方库的作者不一定会遵守这个约定
  • npm ci可以解决部分问题

    确实可以解决本地能跑,持续集成/自动化环境不能跑的问题
  • clevercats   
    1. 一般不会有 bug ,不一般的时候也挺多
    2. 会有坑,偶尔会出现本地和线上不一致的情况
    把前面的 ^去掉,版本就会锁死,但是也不是完全没问题了,因为依赖的依赖,也可能会出问题
    coldmonkeybit   
    指定版本"^3.0.11" , 这里面不加^就行了
    duanxianze   
    只要 lock 文件是同一份,就不会出现拉取到不同的依赖版本的情况吧
    unco020511
    OP
      
    和 gradle/maven,写法差不多啊,^+等正则写法,我映像中包括 python,ruby,php,rust 不都是这样的?直接写数字就是指定了
    unco020511
    OP
      
    @yzw716305797 去掉可以锁定版本我倒是知道.既然锁定版本会有坑,为啥大家都这样写呢?我遇到好几个项目好像都是加^.不是特别理解,因为在用 maven 时,都是固定版本的
    sibusana   
    @duanxianze 包管理工具应该都有提供类似的机制,但好像大家的习惯(或者说约定)差异很大?比如 Android 开发基本没见过不指定具体版本的情况,前端就很多^这样写,想知道为什么会存在这个差异呢
    lingxiaoli   
    @unco020511 如果项目内有 lock 文件,比如 pnpm-lock.yaml 。如果安装之后 lock 文件没有产生修改,可以认为依赖没有变化
    ztxcccc   
    同一个大版本不存在 break change 都是兼容的
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部