美文网首页
谈 DevOps 平台落地:前端项目构建又失败了

谈 DevOps 平台落地:前端项目构建又失败了

作者: 翟志军 | 来源:发表于2019-11-20 08:40 被阅读0次
    image.png

    同事发了一个前端构建失败的链接过来,接着就是那句:任务执行失败了,麻烦帮忙看看。

    DevOps 平台的“老手”了,所以,在找我们解决问题时,都知道附上平台任务的链接。

    我们打开链接,第一件事情就是看日志。是的,DevOps 平台的使用者很多都认为:在本地执行构建成功,那么在平台上构建失败就是平台的问题。所以部分人连构建日志都不看,直接把链接发给我们这些平台维护者看。

    不出意外,这次又是依赖管理问题。只不过,这次是发生在前端项目上。错误截图下如下:

    image.png

    日志里(画红线部分)已经说得很清楚了。虽然我不清楚“Tristan”是什么,但是可以猜到是他的业务代码报这样的错。但是他本地执行没报错,那通常就是依赖的版本的问题了。

    他的前端的依赖定义(package.json)类似以下这样:

    {
    .....
      "dependencies": {
        "cookie-parser": "^1.4.3",
        "debug": "~2.6.9",
        "express": "^4.16.0",
        "http-errors": "^1.6.2",
        "morgan": "~1.9.0",
        "pug": "2.0.0-beta11"
      },
    ...
    }
    

    我们看到依赖的版本号的前缀有 ~,有也 ^。这是什么意思呢?

    • ~: 前缀表示,安装大于指定的这个版本,并且匹配到 x.y.z 中 z 最新的版本。
    • ^: 前缀在 ^0.y.z 时的表现和 ~0.y.z 是一样的,然而 ^1.y.z 的时候,就会 匹配到 y 和 z 都是最新的版本。

    也就是说,每次执行 npm install ,该项目所依赖的内容,都是有可能变的。

    这对我来说是不可思议的。为什么?

    因为依赖的版本代表着一个软件的基础。依赖的版本在你不知道的情况下发生变更,就好比建房子,建第一层时,地基是100个平方,建第二层时,地基突然就变成了90个平方。而前端项目中大量这种情况。

    你可能会说开源前端node项目都会遵循语义化的版本号,小版本升级不会出问题的。我想说,那只是约定,还是要看那个人遵守不遵守。如果你真相信每个人都遵守,本质上是把软件开发风险的控制权交给了开源软件作者的个人习惯。开发出来的软件注定是不稳定的。

    但是,为什么前端项目的依赖的版本号前普遍会加上 ~^ 。在我亲自执行 npm install express 命令时,我知道了原因。因为在执行命令后, package.json 文件中就出现了:"express": "^4.16.0"。也是 npm 在安装依赖时,默认就给版本号加上 ^ 前缀。而很多人可能改都不会去改。这就导致了文章开头所说的那位同事的问题。

    后记

    真心希望大家固定下 package.json 中的依赖的版本号。这样的前端项目构建起来才有稳定的基础。

    同时,我们的 DevOps 平台在设计时,是不是可以考虑增加这么一个功能:自动检测项目有没有固定依赖的版本号,如果没有固定,就告警。

    我把这个功能叫做:依赖版本号不稳定预警。

    封面图来自:https://pixabay.com/zh/photos/scotland-landscape-mountains-hills-1761292/

    0.png

    相关文章

      网友评论

          本文标题:谈 DevOps 平台落地:前端项目构建又失败了

          本文链接:https://www.haomeiwen.com/subject/fhpgictx.html