Vapor是基于Swift Package Manager (SPM for short) 进行的包管理。
Package Manifest 包管理
它是根目录下名为Package.swift的文件。
使用Swift的语法显然让它更加友好。
依赖管理
现代软件开发依赖管理必不可少,Cocoapods 的 Podfile 被整合到了 Package Manifest 里。
在这里所有的依赖放在名为dependencies的数组中。
如下代码片中就添加了vapor 3.0.0 作为依赖。在添加了依赖之后,记得在targets里将新依赖与对应模块关联。至于如何关联见下一节“Targets”
// swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "VaporApp",
dependencies: [
// 💧 A server-side Swift web framework.
.package(url: "https://github.com/vapor/vapor.git", from: "3.0.0"),
],
targets: [ ... ]
)
修改 Package Manifest 后需要在命令行执行vapor update来使配置生效。之前我在学Kitura的时候,就是因为没找到正确的更新配置方式,导致依赖总找不到。
Targets
Targets的含义和iOS项目中一样,包括所有的模块、可执行程序和测试。
示例如下:
// swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "VaporApp",
dependencies: [ ... ],
targets: [
.target(name: "App", dependencies: ["Vapor"]),
.target(name: "Run", dependencies: ["App"]),
.testTarget(name: "AppTests", dependencies: ["App"]),
]
)
从Vapor创建的项目一般都会有App,Run和AppTests三个targets。
如果没有在这里把依赖关联,那么在代码中import就会报错not found
Targets可以互相依赖,比如上面的Run就依赖了App
Tip: 可执行target(包含main.swift文件的target)不能被其他target import.因此Vapor的默认模块才会有App 以及Runtarget,通过把Run拆分出来,App中的代码就能够在AppTests target 中进行测试
目录结构
以下是一个 SPM 包的典型结构:
.
├── Sources
│ ├── App
│ │ └── (Source code)
│ └── Run
│ └── main.swift
├── Tests
│ └── AppTests
└── Package.swift
每一个.target都对应了Source目录下的一个文件夹,而每一个.testTarget则对应的是Tests目录下的文件夹。
Clean
开发中最大的问题往往是环境问题,如果SPM配置出了问题,clean一下:
vapor clean





网友评论