将模块名称设置为不同于 SwiftPM 中的目录名称

Setting module name to be different from directory name in SwiftPM

我有一个 Swift 库,其中包含一个核心模块和可选的奖励模块。我想使用以下目录布局,映射到导出的 Swift 包名称,如图所示:

Taco/
  Source/
    Core/        → import Taco
    Toppings/    → import TacoToppings
    SideDishes/  → import TacoSideDishes

在我看来,这是一个看起来很合理的项目布局。但是,如果我没有正确阅读文档,这将用无用的名称(如“Core”)污染全局模块命名空间。似乎 SwiftPM 只会导出名称与目录名称相同的模块,因此我必须这样做:

Taco/
  Source/
    Taco/
    TacoToppings/
    TacoSideDishes/

有没有办法配置 Package.swift 使用上面更整洁的目录布局并仍然导出所需的模块名称?

或者,是否可以在项目内部制作 Core、Toppings 和 SideDishes 模块,并将它们作为一个大 Taco 模块全部导出到世界?

目前还没有一个干净的方法来做到这一点,但这似乎是一个合理的要求。我建议在 http://bugs.swift.org 提交增强请求。

有一种"hacky"方法可以做到这一点:

在所需的内部布局中创建您的来源:

Sources/Core
Sources/Toppings

为所需的模块名称添加额外的符号链接:

ln -s Core Sources/Taco
ln -s Toppings Sources/TacoToppings

向清单添加 exclude 指令以忽略不需要的模块名称:

let package = Package(
    name: "Taco",
    exclude: ["Sources/Core", "Sources/Toppings"]
)

is it possible to make the Core, Toppings, and SideDishes modules internal to the project, and export them all to the world as one big Taco module?

不,不幸的是目前没有办法做到这一点,它需要大量的编译器工作才能支持。