Meteor 版本求解器:为啥“流星更新”会降级软件包?

Posted

技术标签:

【中文标题】Meteor 版本求解器:为啥“流星更新”会降级软件包?【英文标题】:Meteor version solver: why does "meteor update" downgrade packages?Meteor 版本求解器:为什么“流星更新”会降级软件包? 【发布时间】:2015-03-04 20:16:42 【问题描述】:

我在一个包裹里有这个:

  api.use([
    'kestanous:herald@1.1.3',
    'kestanous:herald-email',
  ]);

正如预期的那样,Meteor 使用 Herald 包的 1.1.3 版本。

如果我删除 @1.1.3 版本,包的versions.json 不会改变。

但现在如果我运行 meteor update kestanous:herald,我会得到以下结果:

$ meteor update kestanous:herald

Changes to your project's package version selections from updating package versions:

kestanous:herald  downgraded from 1.1.3 to 1.0.1

升级软件包实际上会降级它对我来说没有意义。尤其是因为kestanous:herald 在应用程序的其他任何地方都没有使用。更奇怪的是,尽管有消息,包的 versions.json 文件仍然没有更改。

所以看来要么我不明白包版本控制是如何工作的,要么是某些东西不能正常工作?

【问题讨论】:

【参考方案1】:

我不确定我在这 100% 上是否正确,因为使用的系统非常奇怪,并且直到最近才更改了很多次。

Meteor 的新包系统适用于约束求解器。每个包都声明了它设计的 Meteor 版本,例如,如果你为 Meteor 0.9.2 设计它并且你在 Meteor 0.1.0 上运行它,blaze 包会略有不同。

因此,如果您的其他软件包之一所依赖的软件包使用了这个旧版本的 blaze,那么其他软件包将被降级,以便它可以匹配此约束,以便使用所有包含的软件包的最新版本因为约束是匹配的。

因此,如果herald 对某些较旧的 Meteor 包或版本有限制,或者对某些较旧的包有依赖关系,就会发生这种情况。

虽然不必显式定义包,但也可以从 api.versionsFrom("XXX") 隐式定义。

Meteor 然后相应地升级或降级软件包。

此外,根据semver 规范,允许的软件包有一个“余地”,次要软件包版本更新是可以的,但主要版本会强制降级,因为新版本被认为是不兼容的。这也有一点discussion。

这是 kestanous:herald 的包的 package.js 文件:

api.versionsFrom('METEOR@0.9.2');
api.use(['check', 'underscore', 'tracker','accounts-base', 'blaze', 'artwells:queue@0.0.3']);

这意味着你的流星项目中的所有包都将尝试降级,以便它们都可以与这些其他依赖项兼容。

如果您升级了versionsFrom,那么meteor 会更容易接受其他包中的更新版本。

https://github.com/Meteor-Reaction/Herald/blob/master/package.js#L9

【讨论】:

以上是关于Meteor 版本求解器:为啥“流星更新”会降级软件包?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 MATLAB 在使用 ode 求解器时会更改矩阵维度?

你如何检查你正在运行的 Meteor 版本?

为啥强制降级会导致 .Net Core 中的程序集加载异常?

为啥在 Windows 上无法识别节点版本管理器 (NVM)?

为啥当我将 Meteor 应用程序转换为使用 Docker 时,我的 MongoDB 数据会消失?

为啥 Meteor 抱怨集合的插入方法已经定义?