weekidjoker
V2EX  ›  Node.js

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

  •  
  •   weekidjoker · Sep 19, 2023 · 4557 views
    This topic created in 1148 days ago, the information mentioned may be changed or developed.
    35 replies  •  2023-11-07 17:12:48 +08:00
    NessajCN
    NessajCN
    Sep 19, 2023❤️1
    1
    除了必须升级 node 版本以外的所有情况
    julyclyde
    julyclyde
    Sep 19, 2023
    2
    对社会进步感觉恐惧的时候
    enpitsulin
    enpitsulin
    Sep 19, 2023
    3
    🤣团队他人的能力完全 cover 不住任何技术迭代所带来的任何问题的时候,老老实实 nvm use 14 就得了。大家都是赚口饭钱没啥必要
    IvanLi127
    IvanLi127
    Sep 19, 2023 via Android
    4
    项目年久失修的情况下
    wu67
    wu67
    Sep 19, 2023
    5
    项目依赖导致升不上去了. 不维护升级的话, 这个项目基本的所有依赖就锁死版本上限了, 后续想要升级都不敢动, 最后变成💩山, 只能推倒重来

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

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

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

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

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

    当然不管什么时候给项目升级,都要做好测试,最好能灰度发布看一看;这个不论是升级 node 还是升级依赖还是升级系统环境都是一样的。
    zhongs
    zhongs
    Sep 20, 2023
    31
    代码层面,新版本废除了一些老版本的 API
    Torpedo
    Torpedo
    Sep 20, 2023
    32
    服务端一般不升。但是打包比如 webpack 总是尽量升
    LokiSharp
    LokiSharp
    Oct 23, 2023 via iPhone
    33
    没有写单元测试就不升级,写了完善的测试就修改到可以全 PASS 为止
    wangtian2020
    wangtian2020
    Nov 7, 2023
    34
    升不上去的时候,选择不升级 node 版本。
    核心业务跑在 Ubuntu 16 上,实在是升不上去各种依赖缺失。
    试了几个版本用不了,最终用的 nodejs 最新的 v16 ,还行,最新的方便 API 齐全。
    wangtian2020
    wangtian2020
    Nov 7, 2023
    35
    @DOLLOR 2023 年了,
    node-sass 早就一脚踹出依赖了 https://www.npmjs.com/package/node-sass
    dart-sass 直接平替 https://www.npmjs.com/package/sass
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4655 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 69ms · UTC 06:18 · PVG 14:18 · LAX 22:18 · JFK 01:18
    ♥ Do have faith in what you're doing.