流星版本求解器:为什么"流星更新"降级包裹?

时间:2015-01-07 03:20:08

标签: meteor version package-managers

我在一个包中有这个:

  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 个答案:

答案 0 :(得分:0)

我不确定我是否对这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']);

这意味着您的meteor项目中的所有软件包都将尝试降级,以便所有这些软件包都能与这些其他依赖项兼容。

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

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