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 求解器时会更改矩阵维度?
为啥强制降级会导致 .Net Core 中的程序集加载异常?
为啥在 Windows 上无法识别节点版本管理器 (NVM)?