V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
weekidjoker
V2EX  ›  Node.js

什么情况下会选择不升级 node 版本?

  •  
  •   weekidjoker · 2023-09-19 14:14:50 +08:00 · 3044 次点击
    这是一个创建于 434 天前的主题,其中的信息可能已经有所发展或是发生改变。
    35 条回复    2023-11-07 17:12:48 +08:00
    NessajCN
        1
    NessajCN  
       2023-09-19 14:20:08 +08:00   ❤️ 1
    除了必须升级 node 版本以外的所有情况
    julyclyde
        2
    julyclyde  
       2023-09-19 14:22:07 +08:00
    对社会进步感觉恐惧的时候
    enpitsulin
        3
    enpitsulin  
       2023-09-19 14:24:33 +08:00
    🤣团队他人的能力完全 cover 不住任何技术迭代所带来的任何问题的时候,老老实实 nvm use 14 就得了。大家都是赚口饭钱没啥必要
    IvanLi127
        4
    IvanLi127  
       2023-09-19 14:25:37 +08:00 via Android
    项目年久失修的情况下
    wu67
        5
    wu67  
       2023-09-19 14:28:52 +08:00
    项目依赖导致升不上去了. 不维护升级的话, 这个项目基本的所有依赖就锁死版本上限了, 后续想要升级都不敢动, 最后变成💩山, 只能推倒重来

    例如我们的 nuxt2 项目, 好家伙, 直接锁死在 16.14.2, 再高一点点都跑不起来, 其他项目我都升到 18.17.1 了, 就这个不敢动也没法动...
    weekidjoker
        6
    weekidjoker  
    OP
       2023-09-19 14:32:56 +08:00
    @wu67 #5 就是部分依赖不支持高版本的 node ?
    Zhuzhuchenyan
        7
    Zhuzhuchenyan  
       2023-09-19 15:00:20 +08:00
    比如老旧项目,升级不如重写,
    我司现在有
    - 两个 Angular 6 的项目,Node v12
    - 两个 Angular 8 的项目,Node v14
    - 三个 Angular 13 的项目,Node v16
    Zhuzhuchenyan
        8
    Zhuzhuchenyan  
       2023-09-19 15:01:41 +08:00
    纠正一下上文,检查了一个 Angular 6 和 8 的项目,Node 版本是 8 和 10 (掩面)
    DOLLOR
        9
    DOLLOR  
       2023-09-19 15:09:17 +08:00
    当你接手一个依赖 sass 的项目时。
    zackzergzeng
        10
    zackzergzeng  
       2023-09-19 15:09:48 +08:00   ❤️ 1
    小项目随便,大项目 node 升级带来的破坏改动传导到依赖升级,依赖升级带来的破环改动传导到项目本身,然后项目本身兼容这些破环性改动的带来的 bug 和测试成本,算算成本和毛利率基本就放弃了……
    darkengine
        11
    darkengine  
       2023-09-19 15:15:43 +08:00
    没有时间的时候
    weekidjoker
        12
    weekidjoker  
    OP
       2023-09-19 15:23:15 +08:00
    看来我接触的项目还是不够老😂
    babyoung
        13
    babyoung  
       2023-09-19 15:37:12 +08:00   ❤️ 1
    能用
    a632079
        14
    a632079  
       2023-09-19 16:40:17 +08:00
    @weekidjoker #6 依赖 webpack 4 ,webpack 4 使用了旧版 OpenSSL 的接口。webpack 4 貌似使用了 md4 ,无法适配新的 openssl 接口。
    其次,nuxt2 ,vue-cli (这货弃用前还能更 webpack5 ) 都直接弃用了😂,要么加参数,要么就只能摆烂了。
    duan602728596
        15
    duan602728596  
       2023-09-19 16:51:18 +08:00
    让不会 node 的人搞基建,就会成这个样子
    LitterGopher
        16
    LitterGopher  
       2023-09-19 16:52:26 +08:00
    暂时无法联网的时候。
    weekidjoker
        17
    weekidjoker  
    OP
       2023-09-19 17:19:32 +08:00
    @a632079 #14 那新需求能用的依赖都不支持低版本的 node ,怎么办
    a632079
        18
    a632079  
       2023-09-19 17:24:43 +08:00
    @weekidjoker #17
    因此 Node 有 node 版本管理器啊。比如说 NVM 、N 、PNPM 自带的 env 。
    你可以把这个理解成 python 的虚拟环境,不过这个本质更简单,只是改了下 PATH 中 node 的位置。

    P.S 三个里面 n 应该是最好用的,全局包是共享的,但是可能会引入版本冲突问题(如果你往全局赛的不只是 cli tool )
    weekidjoker
        19
    weekidjoker  
    OP
       2023-09-19 17:29:49 +08:00
    @a632079 #18 我知道有版本管理工具,我的意思是在一个低版本 node 才能跑的项目中,某一天要加新功能,而这个功能用到的依赖不支持低版本 node ,这时候要怎么处理?
    a632079
        20
    a632079  
       2023-09-19 17:36:15 +08:00
    @weekidjoker #19 看看库的老版本支不支持,不支持的话只能换别的库、找 polyfill 或者转义(尤其是针对新的 ES 语法,譬如 JS 的 private field )、要么就是自己移植。

    ---------
    这种坑蛮多的,比如说 chalk ,got 这种:node 现在掀起了一股重写成 esm 的潮流——老的 CommonJS 项目,要么找个转义器,比如说 babel ;要么就是用他的旧版本;要么就是花时间换别的库替代。
    liuidetmks
        21
    liuidetmks  
       2023-09-19 17:36:16 +08:00
    @enpitsulin hahaha 我们 node8 webpack 1.x ,没人想改。npm install 都无法成功,必须通过特殊手段安装。
    adoal
        22
    adoal  
       2023-09-19 17:42:13 +08:00   ❤️ 1
    说到底就是成本和收益的权衡。有很多屎山业务系统,用的基础组件已经爆出很多严重安全漏洞了,但就是不去更新。因为安全问题并不一定真的会导致事故,但把业务系统更新挂了又修不好那可是要丢饭碗的。
    adoal
        23
    adoal  
       2023-09-19 17:45:02 +08:00   ❤️ 1
    现实中有很多程序员在对用到的 library/SDK/API/whatever 理解不到位的情况下,发现实际由于 bug 导致的测试行为跟文档不一致,并不会意识到是 bug ,而是凭着瞎猜各种补来补去搞定,还自以为有了新经验。这种你要是去升了,fix bug 了,人家依赖 bug 行为而写的业务系统铁定挂掉。
    weekidjoker
        24
    weekidjoker  
    OP
       2023-09-19 18:14:28 +08:00
    @adoal #23 所以定位 bug 的能力也挺重要的
    guiling
        25
    guiling  
       2023-09-19 18:16:52 +08:00
    开发环境:nvm 随便改
    生产环境:非必要不更新
    7inFen
        26
    7inFen  
       2023-09-19 19:07:19 +08:00
    无所谓,就算升到 v20 还是会用`npm install --legacy-peer-deps`
    Ming5Ming
        27
    Ming5Ming  
       2023-09-19 19:22:43 +08:00
    能用就别升了吧, 何必折腾呢, 万一崩了还得自己去修 bug
    roundgis
        28
    roundgis  
       2023-09-19 20:17:21 +08:00 via Android
    古老項目
    MaxFang
        29
    MaxFang  
       2023-09-19 23:21:02 +08:00
    如果不升级,项目跑不了,那升级;如果升级可以加薪,那升级。否则,都不升级。
    libook
        30
    libook  
       2023-09-20 11:11:32 +08:00   ❤️ 1
    patch 版本通常都会修复 bug 和安全漏洞的,所以一般能升就升。

    minor 版本通常会引入新特性,或积累比较多的更新,出了一个 minor 之后就不会出上一个 minor 的 patch ,所以一般能升就升。

    major 版本通常有支持周期的,如果过了周期也就不会有修复 bug 或安全更新了,所以最好随时保证 major 版本仍有更新支持。其他的就是看依赖包是不是兼容,像 gyp 包就有可能跟 major 版本强相关,node 过新可能编译失败。

    当然不管什么时候给项目升级,都要做好测试,最好能灰度发布看一看;这个不论是升级 node 还是升级依赖还是升级系统环境都是一样的。
    zhongs
        31
    zhongs  
       2023-09-20 17:02:45 +08:00
    代码层面,新版本废除了一些老版本的 API
    Torpedo
        32
    Torpedo  
       2023-09-20 22:40:30 +08:00
    服务端一般不升。但是打包比如 webpack 总是尽量升
    LokiSharp
        33
    LokiSharp  
       2023-10-23 02:25:54 +08:00 via iPhone
    没有写单元测试就不升级,写了完善的测试就修改到可以全 PASS 为止
    wangtian2020
        34
    wangtian2020  
       2023-11-07 17:09:43 +08:00
    升不上去的时候,选择不升级 node 版本。
    核心业务跑在 Ubuntu 16 上,实在是升不上去各种依赖缺失。
    试了几个版本用不了,最终用的 nodejs 最新的 v16 ,还行,最新的方便 API 齐全。
    wangtian2020
        35
    wangtian2020  
       2023-11-07 17:12:48 +08:00
    @DOLLOR 2023 年了,
    node-sass 早就一脚踹出依赖了 https://www.npmjs.com/package/node-sass
    dart-sass 直接平替 https://www.npmjs.com/package/sass
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3515 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 04:48 · PVG 12:48 · LAX 20:48 · JFK 23:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.