我在一个包中有这个:
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
文件仍然没有变化。
所以看起来要么我不明白包版本是如何工作的,要么就是某些东西不能正常工作?
答案 0 :(得分:0)
我不确定我是否对这100%是正确的,因为使用的系统非常奇怪&直到最近才改变了很多次。
Meteor的新软件包系统适用于约束求解器。每个软件包声明其设计的Meteor版本,例如,如果您为Meteor 0.9.2设计它并且在Meteor 0.1.0上运行它,blaze
软件包会略有不同。
因此,如果您的其他软件包中的一个软件包依赖于已使用此旧版本的blaze,那么其他软件包将被降级,以便它可以匹配此约束,以便所有包含的软件包的最新版本使用时间长因为约束是匹配的。
如果herald
对某些较旧的Meteor软件包或版本有约束,或者某些较旧的软件包依赖于它,就会发生这种情况。
虽然不必明确定义包,但也可以从api.versionsFrom("XXX")
隐式定义包。
此外,根据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