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 · 3952 次点击
    这是一个创建于 2208 天前的主题,其中的信息可能已经有所发展或是发生改变。

    直播地址: 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
    锁死版本不怕不怕
    chenqh
        4
    chenqh  
       2018-03-12 19:01:24 +08:00
    哎。。
    duan602728596
        5
    duan602728596  
       2018-03-12 20:32:01 +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   ·   我们的愿景   ·   实用小工具   ·   5414 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 07:52 · PVG 15:52 · LAX 00:52 · JFK 03:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.