在 DUB 中,如何根据可选依赖项有条件地编译代码?

In DUB, how do I conditionally compile code based on optional dependencies?

如果我有一个带有可选依赖项的基于 DUB 的项目,我该如何使某些代码(无论是模块还是版本 (...){...} 块)仅在以下情况下才被编译选择依赖项?有没有一种方法可以根据依赖项是否存在来定义版本标识符?

我已经阅读了 "dependency" 标签的 "optional" 和 "default" 属性,如 here 所述。这允许我将依赖项定义为可选的,但是如果我不能对我的代码进行版本控制以反映所选的依赖项,它就会缺乏牙齿。

也许你可以,我不确定,但你似乎可以使用这样的东西:

version(Have_name_of_dependency)

因此,如果您的可选依赖项是 sdlang-d,您可以使用

Have_sdlang_d

here

相同

这是基于this部分配音代码

除了使用 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;
}

未经测试,但在紧要关头可能会有帮助。