[英]How to create interdependent gems with bundler, and use repositories as the source?
如何創建相互依賴的寶石,仍然使用Bundler?
現在,如果library-a
Gemfile
如下所示:
gem 'library-b'
gem 'library-c'
並且library-b
的Gemfile
讀取如下:
gem 'library-a'
gem 'library-c'
並且library-c
的Gemfile
讀取:
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-a
或library-b
將發生相同消息的變體。
但是如果你對library-c
使用以下內容,並對library-b
和library-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.