gpt4 book ai didi

node.js:依赖项的版本(时刻时区)在运行时发生变化

转载 作者:行者123 更新时间:2023-12-02 17:07:41 24 4
gpt4 key购买 nike

最后一天,我研究了一个神秘问题,其中 moment-timezone 功能在特定的、看似任意的情况下无法工作。 我发现我的 moment-timezone 库的运行时版本在某个时刻从版本 0.5.17 更改为 0.5.13。

在添加更多详细信息之前,这是 node.js 问题还是 moment-timezone 问题?

我最终使用 yarn selective-version-resolutions 解决了 moment-timezone 的具体问题,但如果这实际上是一个 node.js 问题,我认为需要采取更极端的措施(yarn install --flat?)。

我不知道哪个依赖项导致版本在运行时发生更改,但这是添加 resolutions 部分之前我的 yarn.lock 文件中的相关部分:

moment-timezone@0.5.17:
version "0.5.17"
resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.17.tgz#3c8fef32051d84c3af174d91dc52977dcb0ad7e5"
dependencies:
moment ">= 2.9.0"

moment-timezone@^0.5.0, moment-timezone@^0.5.4, moment-timezone@~0.5.5:
version "0.5.13"
resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.13.tgz#99ce5c7d827262eb0f1f702044177f60745d7b90"
dependencies:
moment ">= 2.9.0"

如您所见,我的直接依赖项是版本 0.5.17,但其他模块的依赖项已解析为版本 0.5.13。但我不明白如何在某个时候我的依赖关系被解析为0.5.13

为了检查 moment-timezone 版本,我简单地使用了 moment.tz.version。这意味着在我的生产代码中,以下代码打印 0.5.17 ,直到在某个时刻突然打印 0.5.13:

const moment = require('moment-timezone');
console.log(`moment.tz.version: ${moment.tz.version}`);

最后一个细节:版本更改为 0.5.13 时中断的 moment-timezone 函数是 moment.tz 函数 added in version 0.5.14 上的可选标志。 ,在此代码中:

moment(utcDateTime, format).clone().tz(timezone, true)

谁能解释一下这是怎么可能的?我希望这是一个时刻时区错误而不是 Node.js 错误......

最佳答案

我今天遇到了同样的问题,几个小时后我想我明白发生了什么。如果你检查 moment-timezone 代码,你会发现当它初始化时,它需要 moment,添加 tz 属性以及与时区相关的所有内容,最后返回修改后的 moment 实例:

因此,如果您的直接依赖项和其他模块中的依赖项解析为相同的 moment 版本,则同一个对象会被修改两次,并且您获得的最终版本仅取决于您所需的顺序moment-timezone 以及将 moment-timezone 作为依赖项的模块。

事实上,在moment-timezone代码中,您可以看到这些行被注释掉了:

// Do not load moment-timezone a second time.
// if (moment.tz !== undefined) {
// logError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion);
// return moment;
// }

我不知道为什么开发者会注释掉这个,但显然这是一个已知的行为。

关于node.js:依赖项的版本(时刻时区)在运行时发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50385397/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com