request 库升级造成大量低版本 node.js 平台报错 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
mdluo
V2EX    Javascript

request 库升级造成大量低版本 node.js 平台报错

  •  1
     
  •   mdluo 2018-03-12 18:34:17 +08:00 4335 次点击
    这是一个创建于 2848 天前的主题,其中的信息可能已经有所发展或是发生改变。

    直播地址: https://github.com/request/request/issues/2891

    背景介绍:

    大概两个多小时前( 2018 年 3 月 12 日下午 4 点左右) request 库发布了 v2.84.1 版本,更新包括合并了这个 PR,主要是把依赖的 hawk 这个做加密的库从 6.0.2 升级到了 7.0.7。而 hawk 的这次大版本升级引入了一个叫 sntp 的库。这个库里这么一句话造成了大量错误反馈:

    exports.time = async function (optiOns= {}) { 

    自己搭的 node.js 服务器受影响可能性比较小,毕竟 v6 算是很古老的版本了。但是一些云平台,比如 AWS Lambda 支持的 node.js 版本是 v6.10 ,Google Cloud Functions 支持的版本是 v6.11.5,参考 node.green,很明显都是不支持 async 的。

    我在这个 issue 下回复之后现在正在不断的收到提示邮件...

    11 条回复    2018-03-14 09:25:04 +08:00
    pmispig
        1
    pmispig  
       2018-03-12 18:47:08 +08:00
    又一次依赖惨案
    mdluo
        2
    mdluo  
    OP
       2018-03-12 18:53:04 +08:00
    作者及时发布了更新 v2.85.0 把 hawk 升级的 PR 给 revert 了,惨案暂告段落

    总结经验教训: https://git.io/vxv2g
    kslr
        3
    kslr  
       2018-03-12 18:53:22 +08:00
    锁死版本不怕不怕
    simple2025
        4
    simple2025  
       2018-03-12 19:01:24 +08:00
    哎。。
    duan602728596
        5
    duan602728596  
       2018-03-12 20:32:1 +08:00 via iPhone
    233333333
    inflationaaron
        6
    inflationaaron  
       2018-03-12 22:49:14 +08:00
    依赖地狱是 Node.js 的特色,不得不品尝
    janxin
        7
    janxin  
       2018-03-13 07:06:03 +08:00
    锁版本了解一下? semver 兼容性约定了解一下?依赖地狱了解一下? XD
    Mcatt
        8
    Mcatt  
       2018-03-13 09:35:23 +08:00
    为啥不锁版本
    raphaelsoul
        9
    raphaelsoul  
       2018-03-13 11:04:14 +08:00
    为什么不锁版本???
    mdluo
        10
    mdluo  
    OP
       2018-03-13 12:20:53 +08:00
    @janxin #7
    @Mcatt #8
    @raphaelsoul #9

    请不要站在上帝视角让用户去锁版本,因为用户没法预料哪个包会出问题。而且锁版本是 package-lock.json 或者 yarn.lock 的事情,自己手动去 package.json 里锁版本只能当成紧急措施,因为既锁不住深层依赖,也不方便后序升级更新。第三方依赖包小版本升级造成严重问题的情况相比修复潜在问题的情况还是少很多的。

    request 这次的主要问题因为这个 PR ( https://github.com/request/request/pull/2880 )明明没有通过 CI 但还是被作者给无脑 merge 了。应该吸取的经验教训是单元测试一定要写,CI 一定要用而且结果也很重要。不管是开源项目还是商业项目,尤其是有很多人参与的项目。另外如果写的一个库的用户很多,也要注意在 node.js v6 版本的兼容性,因为很多云平台还是在这个版本。
    Mcatt
        11
    Mcatt  
       2018-03-14 09:25:04 +08:00
    @mdluo

    我同意你说的开源项目一定要跑 CI

    不过对于线上稳定运行的项目不是一般不轻易升级依赖吗?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3762 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 340ms UTC 10:22 PVG 18:22 LAX 02:22 JFK 05:22
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86