为什么即使有yarn.lock文件,我的项目在闲置6个月后仍然失败?

问题描述

我有一个部署到heroku的节点项目。 6个月后,我决定为其添加功能

当我在本地提取代码并运行yarn install时,它可以正常工作,但是当我构建项目时,由于依赖项中的某种错误,它失败了。

我还注意到,如果我在heroku中手动触发一个构建(它将尝试构建6个月前发布的相同代码库),它也会因相同的问题而失败。

显然,这是一个依赖项问题,因为我的代码根本没有更改。

我有yarn.lock文件,所以我不明白是什么原因导致项目没有突然停止工作而没有发生变化。锁定所有依赖项的所有版本的锁定点不是吗?

解决方法

万一其他人正在挖掘一个旧项目而它似乎不再起作用。以下是导致我出现构建问题的一些见解:

在我的package.json中,我有这个:

"engines": {
   "node": "v12.x","yarn": "1.22.x"
},

在大多数情况下都可以,因为您通常仍希望提取所有较小的更新和补丁(尤其是安全更新)

随着时间的推移,构建问题可能会发生,但是,如果这些对节点的更新破坏了以前版本的节点中使用的某些依赖关系。在理想环境中,次要更新和补丁不应破坏任何依赖关系,因为它们不应破坏更改。但这可能由于各种原因而发生(例如,某个依赖关系错误地使用了API;稍后,当该API修复后,该依赖关系便中断了)

摘要:

最初,Heroku正在拉节点v12.16.1,我的项目运行良好。 6个月后,在进行构建时,Heroku引入了节点12.18.4。从技术上来说,这仍然是正确的,因为我只是要求v12.x

介于v12.16.112.18.4之间的某个地方,我的依赖项之一引发了错误。

解决方案: 在engines的{​​{1}}部分中,输入所需的确切版本号。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...