簡體   English   中英

如何使用bundler創建相互依賴的gem,並使用存儲庫作為源?

[英]How to create interdependent gems with bundler, and use repositories as the source?

如何創建相互依賴的寶石,仍然使用Bundler?

現在,如果library-a Gemfile如下所示:

gem 'library-b'
gem 'library-c'

並且library-bGemfile讀取如下:

gem 'library-a'
gem 'library-c'

並且library-cGemfile讀取:

gem 'library-a', github: 'library-root/library-a', branch: 'master'
gem 'library-b', github: 'library-root/library-b', branch: 'master'

當您嘗試為library-c運行bundle update和/或bundle install ,這是輸出:

Your Gemfile requires gems that depend depend on each other,
creating an infinite loop. Please remove either gem 'library-a'
or gem 'library-b' and try again.

對於library-alibrary-b將發生相同消息的變體。

但是如果你對library-c使用以下內容,並對library-blibrary-a使用相同的樣式,那么這將起作用:

gem.add_dependency 'library-a'
gem.add_dependency 'library-b'

但是現在,您需要剪切並將寶石推送到RubyGems以測試每個版本,尤其是在使用Travis CI時。 如果您使用Gemfile定義,即使您還使用了gemspec定義,正在運行或測試的代碼將從git存儲庫中提取,並且可以在不切割和推送gem的情況下最新更新。

我發布了兩個有關此事的問題。

我需要有相互依賴的寶石, 使用git存儲庫作為gem代碼的來源。


對於那些說不做的人 ......“它是Circular Dependency ”等我明白了,但讓我們考慮一下。 寶石真的那么復雜嗎? 它只是具有特定結構的文件。 確實,它具有版本信息和“依賴關系” - 但這些依賴關系只需要存在。 如果已經存在適當版本的寶石,它應該突破“循環依賴”並說“嘿,寶石已經在這里,讓我們向前邁進”然后。


Bundler是一個包管理系統 ; 以上不是對象的 Circular Dependency它是文件的 Interdependency性......如果它是彼此繼承的對象,絕對......我投降了。 但是,這是一個包假定文件系統中存在另一個包的點。

你可以改變單詞depends expects the presence of requires specifically sequential instantiation of

gemspec再次起作用。 如果是Circular Dependency是不可能的。 但作為包管理系統的一部分, gemspec在其目的上更加清晰。 它讓文件成為文件。

gemspec行為? 兩顆寶石都需要彼此? 涼! 下載兩個寶石。 容易,完成。 Gemfile行為? 兩顆寶石都需要彼此? 等等,什么? 崩潰。

我想要gemspec “依賴”行為,具有Gemfile源特異性功能。 否則我只會繼續使用gemspec

Bundler警告你,你的寶石具有循環依賴性。 即庫-a依賴於庫-b,反之亦然。 這是應該避免的情況。

如果兩個圖書館彼此之間不存在,那么最好只讓它們成為一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM