V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
victimsss
V2EX  ›  程序员

越来越讨厌 nodejs 的版本管理机制

  •  
  •   victimsss · 18 小时 27 分钟前 · 1685 次点击
    https://stackoverflow.com/questions/73908197/typeerror-store-get-is-not-a-function-nestjs-cache-manager/76777854#76777854

    https://github.com/jaredwray/cacheable/issues/210

    以 nestjs 为例,当前服务是 v9 ,想引入依赖的时候,pnpm 也没有提供版本不兼容的提示,只有安装了运行出错了才知道。

    顺便吐槽一下,还有多个依赖都有这种情况,好多库 v4 升 v5 改单位了,为啥:
    cache-manager version 4 uses seconds for . The current version of (v5) has switched to using milliseconds instead. NestJS doesn't convert the value, and simply forwards the ttl you provide to the library.
    22 条回复    2024-11-29 21:17:08 +08:00
    zdw189803631
        1
    zdw189803631  
       18 小时 23 分钟前
    确实一坨
    UltraXiaoZi
        2
    UltraXiaoZi  
       18 小时 22 分钟前
    哈哈,这个我深有体会! Node.js 的依赖管理有时候真的让人抓狂,特别是遇到那些悄悄改动 API 或者行为的库。NestJS 的版本兼容性坑确实不少,pnpm 虽然速度快,但在依赖冲突提示上真的不如人意。

    关于 cache-manager 的 TTL 单位从秒变成毫秒,简直是坑死人不偿命!升级个版本还得逐个去看文档和 Changelog ,不然一不小心就踩坑里了。还有那些库大版本升级就随意改动接口,真想对着他们的 GitHub 疯狂提 Issue !

    看样子以后还是得在 package.json 里明确指定依赖版本,或者用 lock 文件锁定,不然踩坑的日子没完没了。共勉吧,技术之路就是踩坑填坑的循环😂。
    sch1111878
        3
    sch1111878  
       18 小时 20 分钟前
    直接固定版本呢?
    pursuer
        4
    pursuer  
       18 小时 18 分钟前
    和版本管理机制关系不大。
    这个主要还是 JS 这边的库生态的前向兼容做的太差了。
    相比较,JS/Web 发展那么久也没把之前的设计失误的特性删掉,比如"==",自动创建 id 等。
    sudodo
        5
    sudodo  
       18 小时 16 分钟前
    跟 python 的比呢?半斤八两吗兄弟们?
    qiaobeier
        6
    qiaobeier  
       18 小时 15 分钟前
    又不是不能用[楼上头像]
    crysislinux
        7
    crysislinux  
       18 小时 14 分钟前 via Android
    ttl 变毫秒这个变动迟早要做的,js 的包对时间的趋势就是统一用毫秒。
    victimsss
        8
    victimsss  
    OP
       18 小时 12 分钟前
    @sch1111878
    固定版本的前提是先踩了版本不兼容的坑,因为这是一个新引入的依赖,要么你是事先知道 xx 版本就是兼容
    wu67
        9
    wu67  
       18 小时 8 分钟前   ❤️ 1
    准确的说, 你这是‘第三方包中包’的问题, 跟 node 本身的包管理问题虽然有交叉、但是关联不是特别大.

    我手头有个项目还是 nuxt2 的, 根本升不上去 nuxt3 了(除非每个页面手动改改改), 依赖包升了各种炸, node.js 版本也上不去了, 锁死在 16.14.2, 更要命的是这个项目是去年上线的, 不知道还能跑多久不炸, 也不知道那天某个依赖包会彻底爆炸
    3825995121
        10
    3825995121  
       17 小时 58 分钟前   ❤️ 1
    一般来说都要遵守在语义化版本( Semantic Versioning ) 版本号通常采用 主版本号.次版本号.修订号 的格式
    主版本号的增加通常意味着重大更新 向后不兼容的更改。可能需要用户修改代码或配置才能使用新的版本
    次版本号 次版本号的增加通常意味着功能性更新,但保持向后兼容
    修订号 修订号的增加通常用于修复问题( Bug Fixes ),不会引入新功能,也不会破坏向后兼容
    这个版本管理机制有什么关系呢 一般来说 都会锁定前两位置 不会出问题的
    importmeta
        11
    importmeta  
       17 小时 53 分钟前
    "upgrade": "npx npm-check-updates -i --format group", 我的项目都会加这一条脚本, 每天上班了就会运行一下, 自己控制升级, 推荐给你.
    mark2025
        12
    mark2025  
       17 小时 47 分钟前   ❤️ 3
    @UltraXiaoZi
    既然是 major 版本 4 -> 5 ,就说明有破坏性变更。升级之前就需要去看它 changelog 日志啊
    kid740246048
        13
    kid740246048  
       17 小时 42 分钟前   ❤️ 2
    这跟 nodejs 和 pnpm 都没关系,这应该是包维护者是否遵循 semver ,以及升级依赖的时候是否关注 changelog 的问题。nodejs 的依赖管理是有问题,但不太能理解楼主这个怎么能怪到 nodejs 依赖管理上去
    songyoucai
        14
    songyoucai  
       17 小时 38 分钟前
    说实话, 这是生态繁荣的一种特征,用任何库之前,都得对它足够的了解。不轻易升级
    GiantHard
        15
    GiantHard  
       17 小时 36 分钟前
    JS 跟时间相关的 API 确实太弱了,可能等 Temporal.Duration 类型普及了,就不会有库用 number 表示时长了。

    https://tc39.es/proposal-temporal/docs/duration.html
    COW
        16
    COW  
       17 小时 33 分钟前
    @sudodo python 确实是半斤八两,我现在 requirement 里都是锁版本的。
    sudodo
        17
    sudodo  
       17 小时 28 分钟前
    java 和 golang 的兼容性就好多了
    EchoWhale
        18
    EchoWhale  
       17 小时 27 分钟前 via iPhone
    这跟 nodejs 没啥关系
    sillydaddy
        19
    sillydaddy  
       17 小时 18 分钟前 via Android
    #10 楼说的很清楚。主版本号升级,通常意味着不兼容。这个平时一定要注意。
    不过锁死了主版本,可能会锁死一大批依赖它的库的版本,也挺麻烦。
    skallz
        20
    skallz  
       17 小时 18 分钟前
    @sudodo 刚好两个都是深度使用者,我只能说 node 虽然包管理做的不咋地,但是 py 做的更是一坨,比 node 还要辣鸡
    jqtmviyu
        21
    jqtmviyu  
       13 小时 29 分钟前
    @sudodo #5 那还是比 python 好多了. pnpm 有硬链接领先一个档位.
    chihiro2014
        22
    chihiro2014  
       13 小时 28 分钟前
    我更喜欢 maven 一把梭
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2923 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 02:45 · PVG 10:45 · LAX 18:45 · JFK 21:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.