gpt4 book ai didi

ruby-on-rails - 有没有办法打包我的 gem 依赖于我的 gem 的所有 gem ?

转载 作者:太空宇宙 更新时间:2023-11-03 16:30:10 31 4
gpt4 key购买 nike

我正在编写一个具有多个 gem 依赖项的 gem,其中一个依赖于破坏新版本向后兼容性的 gem。这让我开始思考——我不希望我正在构建的 gem 变成“那个 gem”,让人们难以更新他们的应用程序。我也不想强制使用我的 gem 的人必须在他们的应用程序的其余部分中使用它所依赖的特定版本的 gem。

一方面,我可以重写这些依赖项中的所有代码,将它们与我的 gem bundle 在一起,然后一起删除依赖项,但这似乎有点乏味。有没有什么办法可以让我直接在我的 gem 中简单地包含 gem 依赖项,然后将它们包装在一个模块中,这样我的打包版本就不会与应用程序其余部分使用的版本冲突?

最佳答案

我认为您想要的东西无法通过现有的 Ruby 工具实现。但是,如果依赖依赖项时的向后兼容性纯粹是语法/使用问题,而不是版本之间的低级差异,那么您不必导入和维护旧 gem 的代码。您还有另一种选择:在您的 gem 中创建一个“垫片”层,它提供您需要的来自依赖项的新接口(interface)或旧接口(interface)的功能。

在实践中它可能看起来像这样,通过示例假设它是 Thingy 类的构造函数发生了变化:

module DependencyShim

def new_Thingy( new_style_args )
if thingy_is_new
Thingy.new( new_style_args )
else
Thingy.new( convert_args_to_old_style( new_style_args ) )
end
end

# convert_args_to_old_style() not shown

private

def thingy_is_old
Thingy::VERSION < '1.3.4'
end

def thingy_is_new
Thingy::VERSION >= '1.3.4'
end
end

更好的抽象很可能是可能的,但很难预测,因为我不知道新旧之间差异的本质,以及您的代码与您的依赖关系的紧密程度。

如果版本之间有根本性的变化,这显然是痛苦的,并且您自己的 gem 大量使用依赖项。但即便如此,与在您自己的 gem 中重新实现和维护依赖关系相比,它可能仍然没有那么痛苦。

我会建议考虑让你的 gem 与你的依赖项的最新版本兼容,并根据你对用户的了解,从长远来看逐步弃用对旧依赖项的支持根据。可能有充分的理由让所有相关人员摆脱旧的依赖关系。

关于ruby-on-rails - 有没有办法打包我的 gem 依赖于我的 gem 的所有 gem ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17548103/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com