🎬 www.pointfree.co
这个仓库包含了 Point-Free 网站的完整源代码,这是一个探索 Swift 高级编程主题的视频系列。代码库分为三个部分:
PointFree
:这是核心应用程序,负责路由请求、加载数据以及渲染 HTML 和 CSS。Styleguide
:这个库包含了创建整个网站一致风格的函数和数据类型。Server
:这是实际的可执行服务器。它使用 NIO 处理底层服务器职责,并将其他所有内容交给PointFree
包处理。
入门
对代码库视频导览感兴趣吗?
该仓库包含了广泛的测试套件和一些可以探索的 playground。要运行项目:
-
打开终端窗口并获取代码:
git clone https://github.com/pointfreeco/pointfreeco.git cd pointfreeco
-
确保已安装
cmark
。你可以用 Homebrew 安装:brew install cmark # 或者你喜欢的其他安装方法
-
确保已安装 Postgres 并且正在运行。这是我们选择的数据库。你可以用 Homebrew 安装:
brew install postgres # 或者你喜欢的其他安装方法 brew services start postgresql # 或者你喜欢的其他启动方法 make db
(如果你使用 Postgres.app、EnterpriseDB 或其他安装方法,请遵循 CPostgreSQL README 中的一些额外说明。)
在 Xcode 中打开项目后,你可以:
- 在本地运行服务器
- 选择
Server
目标 - 运行:Command+R
- 访问
http://localhost:8080
- 选择
- 探索我们的 playground
- 选择
PointFree
目标 - 构建:Command+B
- 打开一个 playground!
- 选择
一些有趣的探索内容
这个仓库中有很多有趣的东西可以探索。例如:
-
我们在 playground 中开发网页,以实现持续反馈循环。这是因为整个服务器堆栈由纯函数组成,副作用被推到应用程序的边界。这使我们能够单独加载任何请求,包括
POST
请求,而无需担心产生副作用。 -
我们使用快照测试捕获完整的数据结构,以验证其正确性。我们不仅以传统方式在各种断点处对网页进行截图(例如在 iPhone 和 桌面上),还可以对整个请求到响应的生命周期进行快照(例如,对注册页面的
POST
请求进行正确的重定向)。
▿ Step
ResponseEnded
▿ Request
POST http://localhost:8080/launch-signup
email=hello@pointfree.co
▿ Response
Status 302 FOUND
Location: /?success=true
Xcode 配色主题
喜欢我们在视频中使用的配色主题吗?运行 make colortheme
在本地安装!
相关项目
Point-Free 使用了许多有趣的开源软件:
- 🗺 swift-html:用于类型安全、可扩展和可转换的 HTML 文档的 Swift DSL。
- 🕸 swift-web:用于处理常见 Web 服务器问题的类型和函数集合,如 HTML 渲染、CSS 预处理、中间件等。
- 🎶 swift-prelude:为 Swift 中的实验性函数式编程提供标准库。
- 🏷 swift-tagged:帮助我们在数据边界创建强契约,如来自 GitHub 和 Stripe 的 JSON,以及我们的 PostgreSQL 数据。
- 📸 swift-snapshot-testing:通过对各种数据结构进行快照来保证其输出的正确性,从而支持我们的测试基础设施。我们在各个方面都使用它,从 中间件 以确保请求正确转换为响应,到整个网页,以确保网站在各种尺寸下看起来正确(例如在 iPhone 和 桌面 上)。
在 Point-Free 组织中探索更多我们的开源项目。
了解更多
Brandon 在 Swift Summit 2017 上做了一个演讲,讲述了这个项目中的大部分核心理念。
觉得有趣吗?
那就来看看 Point-Free!
许可证
本项目的内容本身采用 CC BY-NC-SA 4.0 许可证,用于格式化和显示该内容的底层源代码采用 MIT 许可证。