如果我有一個基於DUB的項目有一個可選的依賴關係,我如何使它成爲一些代碼(無論是模塊還是版本(...){...}塊)只有在依賴項被編譯時纔會被編譯選擇?有沒有一種方法可以根據依賴關係是否存在來定義版本標識符?在DUB中,我如何根據可選的依賴項有條件地編譯代碼?
我已經閱讀了關於「依賴」標籤的「可選」和「默認」屬性的文檔here。這使我可以將依賴項定義爲可選項,但如果我無法對代碼進行版本化以反映所選依賴項,則缺乏依賴性。
如果我有一個基於DUB的項目有一個可選的依賴關係,我如何使它成爲一些代碼(無論是模塊還是版本(...){...}塊)只有在依賴項被編譯時纔會被編譯選擇?有沒有一種方法可以根據依賴關係是否存在來定義版本標識符?在DUB中,我如何根據可選的依賴項有條件地編譯代碼?
我已經閱讀了關於「依賴」標籤的「可選」和「默認」屬性的文檔here。這使我可以將依賴項定義爲可選項,但如果我無法對代碼進行版本化以反映所選依賴項,則缺乏依賴性。
除了使用version(foo)
塊並要求用戶在他們的dub.sdl中使用versions: "foo"
之外,還有另外一種選擇。它很糟糕,但它會起作用。
如果你的代碼是一個模板,你可以用在相關的東西:
template HasVibe()
{
enum HasVibe =
is(typeof(() { import vibe.d; }));
}
template Foo(T) if (HasVibe!())
{
// your code here
}
如果它不是模板,你可以把它變成一個模板:
template log() if (HasVibe!())
{
import vibe.core.log : logDebug;
alias log = logDebug;
}
未測試,但它可能有助於捏。
我認爲你釘了它。謝謝! 我能夠通過將它從dub.selections.json中刪除並使用您建議的版本(Have_ *)代碼來構建不依賴的項目。不幸的是,依賴於該項目的其他項目仍然堅持在其依賴圖中包括可選的依賴項(ex:sdlang-d),儘管第一個項目中的default = false,而每個dub.selections.json文件中缺少sdlang-d參與其中。但是,這似乎是一個不同的問題......也許是一個錯誤或另一個問題要問。 – chadjoan
你應該使用optional = true – Kozzi11
optional = true被設置爲(已經);對不起,我認爲這是隱含的。 – chadjoan