Managing your project

Vapor 使用 Swift Package Manager (简称 SPM) 构建工程的源码和依赖. SPM 和 Cocoapods, Ruby gems 和 NPM 类似. 在大部分应用场景下, Vapor Toolbox 代替你来与 SPM 沟通, 了解底层运作仍然很重要.

tip

了解更多关于 SPM Swift.org →

包清单

SPM 会首先检查你文件中的包清单: 位于工程根目录下的 Package.swift.

Dependencies

Dependencies 中列出的是你的程序包依赖的其他 SPM 程序包, 所有 Vapor 应用程序都依赖 Vapor 软件包, 但你可以根据需求添加其他依赖项.

  1. // swift-tools-version:4.0
  2. import PackageDescription
  3. let package = Package(
  4. name: "VaporApp",
  5. dependencies: [
  6. // 💧 A server-side Swift web framework.
  7. .package(url: "https://github.com/vapor/vapor.git", from: "3.0.0-rc"),
  8. ],
  9. targets: [ ... ]
  10. )

上面的示例代码中, 3.0 或更高版本的 vapor/vapor → 是这个程序包的依赖项, 向程序包中添加依赖项时, 需要标注那些 targets 依赖哪些最新可用的模块.

warning

每次修改包清单的时候, 调用 vapor update 来实现更改.

Targets

Target 是你程序包中所有的模块, 可执行文件和单元测试.

  1. // swift-tools-version:4.0
  2. import PackageDescription
  3. let package = Package(
  4. name: "VaporApp",
  5. dependencies: [ ... ],
  6. targets: [
  7. .target(name: "App", dependencies: ["Vapor"]),
  8. .target(name: "Run", dependencies: ["App"]),
  9. .testTarget(name: "AppTests", dependencies: ["App"]),
  10. ]
  11. )

大部分 Vapor app 包含三个 target, 尽管你也可以添加任意多的 target 来组织代码. 每个 target 声明他依赖的模块, 你必须在这里添加模块名字以将它 引入 到你的代码中. 一个 target 可以依赖项目中其他 target, 也可以依赖已经添加到 main dependencies 列表的包所暴露的 任何 target.

tip

可执行 target(包含 main.swift 文件的 target) 不可以被其他模块 引入, 所以 Vapor 有两个 target AppRun. 任何 App 中的代码都可以在 AppTests 中测试.

文件结构

下面是典型的 SPM 文件结构

  1. .
  2. ├── Sources
  3. ├── App
  4. └── (Source code)
  5. └── Run
  6. └── main.swift
  7. ├── Tests
  8. └── AppTests
  9. └── Package.swift

每个 .target 对应 Sources 文件夹中的文件夹, 每个 .testTarget 对应 Tests 文件夹中的文件夹.

问题解决

如果你使用 SPM 时遇到问题, 清理项目有时会有帮助.

  1. vapor clean