3

我有一个带有核心模块和可选奖励模块的 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 模块导出到世界各地?

4

1 回答 1

4

目前没有一种干净的方法可以做到这一点,但这似乎是一个合理的要求。我建议在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"]
)

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

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

于 2016-08-16T15:40:58.047 回答