说,我有Gemfile,如下所示。
source "GEM_REPOSITORY"
gem 'gem_A'
# gem_A has no additional dependency
gem 'gem_B'
# gem_B depends on gem_B_1 and gem_B_2
当我运行bundle install
时,我希望Bundler执行以下操作。
如果某个宝石已存在于"本地系统范围的宝石"中,它会从本地复制宝石。
如果某个宝石不存在于本地,它会查找GEM_REPOSITORY。
我找了一些相关文章,发现了一些可能的答案,比如
但以上都不是我的答案。
使用源存储库优先级不起作用。因为在上面的示例中,如果依赖gem(例如,gem_B_1
)在本地退出但目标gem(gem_B
)不存在于本地,它将下载以上两者来自远程存储库。
有没有做这件事的工作? 如果没有,那么你们认为考虑到实施成本和影响是否必要?
答案 0 :(得分:1)
这是当前的行为。
直接或通过gem install
运行bundle install
时,gem
将首先构建包含所有所需宝石的依赖关系图。如果在本地找到gem
,它将使用它,否则它将尝试从指定的源下载它。
如果您愿意,请亲自尝试。
bundle gem gem_a
bundle gem gem_b
cd gem_a
vim gem_a.gemspec
添加
spec.add_dependency 'multi_json', '~> 1.10.1'
或您想要的任何依赖关系并运行bundle install。
cd ../gem_b
vim Gemfile
并添加
gem 'gem_a', path: '../gem_a'
然后运行
bundle install --verbose
您会看到multi_json
或gem_a
的任何依赖项使用本地版本而不下载任何内容。
对于远程来源的宝石来说当然也是如此。