Meteor Atmosphere/Core Package Dependency Resolution Override (jquery, iron-router, blaze)

Posted

技术标签:

【中文标题】Meteor Atmosphere/Core Package Dependency Resolution Override (jquery, iron-router, blaze)【英文标题】: 【发布时间】:2020-06-07 02:42:51 【问题描述】:

我有一个包含以下软件包的流星应用程序:

$ meteor list

accounts-password      1.5.3  Password support for accounts
accounts-ui            1.3.1  Simple templates to add login widget...     
blaze-html-templates   1.1.2  Compile HTML templates into reactive...     
ecmascript             0.14.2  Compiler plugin that supports ES201...     
es5-shim               4.8.0  Shims and polyfills to improve ECMAS...     
fourseven:scss         4.12.0  Style with attitude. Sass and SCSS ...     
iron:router            1.1.2  Routing specifically designed for Me...     
jquery                 1.11.11* Manipulate the DOM using CSS selec...     
meteor-base            1.4.0  Packages that every Meteor app needs        
mobile-experience      1.0.5  Packages for a great mobile user exp...     
mongo                  1.8.1  Adaptor for using MongoDB and Minimo...     
reactive-var           1.0.11  Reactive variable
shell-server           0.4.0  Server-side component of the `meteor...     
standard-minifier-css  1.6.0  Standard css minifier used with Mete...     
standard-minifier-js   2.6.0  Standard javascript minifiers used w...     
tracker                1.2.0  Dependency tracker to allow reactive...     
typescript             3.7.5  Compiler plugin that compiles TypeSc...     


* New versions of these packages are available! Run 'meteor update'       
  to try to update those packages to their latest versions. If your       
  packages cannot be updated further, try typing
  `meteor add <package>@<newVersion>` to see more information.

大气包jquery提供3.0.0版本。在安装iron-router 之前,我一直在这样做。我按照以下建议成功安装了iron-router:https://forums.meteor.com/t/iron-router-jquery-dependency/51374(特别是meteor add iron:router --allow-incompatible-update)。

我想使用较新的3.0.0。我不认为iron-router 中存在任何真正的不兼容。

但是,如果我尝试添加它,我会得到:

$ meteor add jquery@3.0.0

-error: Conflict: Constraint jquery@1.0.0 is not satisfied by jquery       
3.0.0.
Constraints on package "jquery":
* jquery@3.0.0 <- top level
* jquery@1.11.9 || 3.0.0 <- blaze 2.3.4 <- accounts-base 1.5.0 <-
accounts-password 1.5.3
* jquery@1.11.9 || 3.0.0 <- blaze 2.3.4 <- blaze-html-templates
1.1.2
* jquery@1.0.0 <- iron:dynamic-template 1.0.12 <- iron:controller
1.0.12 <- iron:router 1.1.2
* jquery@1.0.0 <- iron:location 1.0.11 <- iron:router 1.1.2

最初,我很难看到它是从哪里获得 1.0.0 的 Iron:* 依赖项,因为没有列出明确的版本:

https://github.com/iron-meteor/iron-dynamic-template/blob/devel/package.js#L14 https://github.com/iron-meteor/iron-location/blob/master/package.js#L13

然后我在the documentation 中为api.versionsFrom(meteorRelease) 找到了这个:

使用发行版中的核心包版本。除非提供,否则所有软件包都将默认为与 meteorRelease 一起发布的版本。这将使您不必弄清楚要使用的核心包的确切版本。例如,如果meteor的最新版本是`METEOR@0.9.0,它包含jquery@1.0.0,你可以在你的包中写api.versionsFrom('METEOR@0.9.0'),等你以后写api的时候.use('jquery'),就相当于 api.use('jquery@1.0.0')。

所以这似乎是正在发生的事情——jquery@1.0.0 是 tied to METEOR@0.9.2


所以...除了将iron-* 包作为自定义包签出到我的本地项目中的选项之外,以覆盖自定义fork 中的api.versionsFrom(meteorRelease) 到现代版本(或者更确切地说,指定一个特定的jquery 版本,因为我相信它不再是一个核心包)......有没有办法强制更新到jquery@3.0.0,尽管它认为这是一个冲突?

很遗憾,--allow-incompatible-update 在这种情况下似乎不起作用。

【问题讨论】:

这个问题解决了吗? 【参考方案1】:

这有点固执,但如果你想拥有一个不依赖于过时包的路由器,你应该使用ostrio:flow-router-extra,它甚至允许你省略 jQuery 或使用 npm 包安装 jQuery。

从 Meteor 1.8.3 开始,Blaze 和 jQuery 之间也没有硬依赖,允许从 npm 注册表安装最新的 jQuery,这从安全角度来看很重要。

查看: https://github.com/VeliovGroup/flow-router https://github.com/meteor/meteor/blob/devel/History.md

【讨论】:

【参考方案2】:

使用 @= 安装特定的 pkg 版本。如果降级,则需要删除 npm jquery pkg。

meteor add jquery@=1.11.11
meteor npm remove jquery
meteor add iron:router

【讨论】:

以上是关于Meteor Atmosphere/Core Package Dependency Resolution Override (jquery, iron-router, blaze)的主要内容,如果未能解决你的问题,请参考以下文章

Meteor 会话 cookie 和 meteor_login_token

Meteor:ArrayBuffer(FileReader 结果)未传递给 Meteor.method()

在 Meteor 运行时,如何从另一个客户端访问 Meteor 的 MongoDB?

如何使用 METEOR_SETTINGS 环境变量在 AWS/EBS 上配置 Meteor

初识Angular-Meteor(Angular-Meteor使实时全栈更简单)

如何在没有 Meteor 的情况下获得 Meteor 的路由/即时换页效果?