Vapor-SPM

作者: tsiic | 来源:发表于2019-04-25 10:32 被阅读0次

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,RunAppTests三个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

参考资料

  1. https://docs.vapor.codes/3.0/getting-started/spm/

相关文章

  • Vapor-SPM

    Vapor是基于Swift Package Manager (SPM for short) 进行的包管理。 Pac...

网友评论

      本文标题:Vapor-SPM

      本文链接:https://www.haomeiwen.com/subject/jfdagqtx.html