如何覆盖gem依赖?
我有2个gem依赖于相互冲突的hashie版本(一个需要〜> 1.2.0而另一个需要3.3.1):
Bundler could not find compatible versions for gem "hashie": In Gemfile: restforce (>= 0) ruby depends on hashie (~> 1.2.0) ruby omniauth (>= 0) ruby depends on hashie (3.3.1)
我想保留两个gem并使用更高版本的hashie。 有没有办法覆盖其中一个gem依赖项?
标准建议是使用更高版本兼容 。
我这样做,但我认为bundler有一个已定义的命令。
首先在gem 'omniauth'
删除gem 'omniauth'
行。 运行bundle install
,然后你必须再次将gem 'omniauth'
的行添加到你的Gemfile中,再次运行bundle install。
如果你看一下Gemfile.lock,这个安装hashie 2.0.5
,兼容性更高。
编辑:为什么它有效?
首先,我用hashie检查omniauth依赖关系: hashie < 4, >= 1.2
,然后与restforce相同: hashie < 2.1, >= 1.2.0
。 在这一点上,我知道1.2和2.0.x之间的任何版本的hashie都必须工作。 然后我们必须删除使用hassie 3.3.1的Gemfile.lock中的约束,从Gemfile中删除’omniauth’它已完成。 之后,当安装restforce时,bundler会发现新版本与restforce’2.0.5’兼容。 当你再次添加omniauth时,不要更新已完成的依赖项。
我认为bundle update
实际上就是你所追求的。 如果需要,可以排除依赖关系并安装不同版本的gem,为您提供最新的gem。
但要小心,因为更新gem会引入兼容性问题。