Phoenix 1.4.0 发布

发布于 2018 年 11 月 7 日 由 Chris McCord


Phoenix 1.4 发布了!此版本包含令人兴奋的新功能,最值得注意的是 HTTP2 支持,更快的编译时间带来的改进开发体验,新的错误页面以及本地 SSL 证书生成。此外,我们的频道层内部进行了全面检修,提供了更好的结构和可扩展性。我们还发布了新的改进的 Presence Javascript API,以及用于路由和测试 DSL 的 Elixir 格式化程序集成。

phx_new hex 归档

mix phx.new 归档现在可以通过 hex 安装,从而提供更简单,版本化的安装体验。

要获取新的归档文件,只需运行

$ mix archive.uninstall phx_new
$ mix archive.install hex phx_new 1.4.0

新的生成器现在默认使用 Ecto 3.0,这应该对现有应用程序来说是一个简单的升级。Ecto 3.0 充满了新功能和改进,您可以在 Ecto 3.0 抢先体验文章 中阅读更多相关内容。

新的生成器还使用 Milligram 而不是 Bootstrap 来支持无类标记生成。结果是美观默认值,允许生成的标记更轻松地自定义到您个人 CSS 要求。

注意:现有的 Phoenix 应用程序将继续在 Elixir 1.4 上运行,但新的 phx.new 归档文件需要 Elixir 1.5+

HTTP2

得益于 Cowboy 2 的发布,Phoenix 1.4 通过对 mix.exs 进行单行更改来支持 HTTP2。只需将 {:plug_cowboy, "~> 2.0"} 添加到您的依赖项中,Phoenix 就会使用 Cowboy 2 适配器运行。

本地 SSL 开发

大多数浏览器都需要通过 SSL 连接才能进行 HTTP2 请求,否则它们将回退到 HTTP 1.1 请求。为了帮助本地 SSL 开发,phoenix 包含一个新的 phx.gen.cert 任务,该任务会生成一个自签名证书,用于在开发环境中进行 HTTPS 测试。

有关更多信息,请参阅 phx.gen.cert 文档。

更快的开发编译

得益于对 plug 和编译时更改的贡献,我们的开发编译速度得到了提升。您可以在我的 DockYard Phoenix 文章 中阅读有关详细信息。

新的开发 404 页面

我们开发中的 404 页面现在列出了来自原始路由器的可用路由,例如

UserSocket 连接信息

一个高度要求的功能是在使用 Phoenix 通道时可以访问更多底层传输信息。1.4 版本现在提供了一个 connect/3 UserSocket 回调,该回调可以提供连接信息,例如对等 IP 地址,主机信息以及 WebSocket 和长轮询传输的 HTTP 请求的 X-Headers。

新的 Presence JavaScript API

一个新的向后兼容的 Presence JavaScript API 已被引入,既可以解决竞争条件,也可以简化使用。以前,客户端需要对 "presence_state"presence_diff" 事件进行多个通道回调,这些回调会分派到 Presence.syncStatePresence.syncDiff 函数。现在,该接口已统一到单个 onSync 回调中,并且 presence 对象跟踪其自身的通道回调和状态。例如

let presence = new Presence(roomChannel)
presence.onSync(() => {
  console.log("users online:", presence.list((id, {name}) => name))
})

就是这样!

webpack

mix phx.new 生成器现在使用 webpack 生成资产,而不是 brunch。开发体验保持不变 - javascript 位于 assets/js 中,css 位于 assets/css 中,静态资产位于 assets/static 中,因此那些对 JS 工具细微差别不感兴趣的人可以继续使用相同的模式,同时使用 webpack。那些需要最佳 js 工具的人可以从 webpack 更复杂的代码捆绑中获益,包括消除死代码等等。

接下来是什么

随着 1.4 的发布,我们已准备好将精力集中在 Elixir 和 Phoenix 生态系统周围的其他激动人心的举措上。最值得注意的是,我们很高兴将 telemetry 集成到 Phoenix 中,以进行指标跟踪和可视化。同时,我们还在努力将 Phoenix.PubSub 重写为更小的构建块,并为社区提供一个一流的分布式编程工具包。您可以在 Firenest 项目中跟踪此进度。

除了 telemetry 和 firenest 计划外,我们还在开发 Phoenix.LiveView,以实现无服务器渲染的实时体验,而无需当今单页应用程序环境的全部复杂性。LiveView 可以根据某些用例实现与单页应用程序相当丰富的 UX,我们迫不及待地想将初始版本发布到社区。

我的 ElixirConf 主题演讲详细介绍了 telemetry 和 LiveView

Programming Phoenix 书籍

Programming Phoenix 书籍 处于测试版,可通过 PragProg 获取,并包含 1.4 的所有最新更改。我们将本书命名为“>= 1.4”,并认为它在未来版本中比较稳定,因为我们将继续进行次要版本发布。

特别感谢

我要特别感谢 Loïc Hoguin 在 Cowboy 2 上的辛勤工作,使我们能够提供一流的 HTTP2 体验。我们还要感谢 Bram Verburg,他为跨平台,无依赖项的证书生成贡献了本地 SSL 证书生成。

此外,我要感谢 José Valim 和 Plataformatec 在频道层大修方面所做的工作,该大修为将来提供了可扩展的基础。

与往常一样,我们提供了将您的 1.3.x 应用程序更新到最新版本的逐步说明: https://gist.github.com/chrismccord/bb1f8b136f5a9e4abc0bfc07b832257e

如果您有任何问题,请将问题报告到问题跟踪器,并在 #elixir-lang irc,elixir slack 和 Elixir 论坛上找到我们。可以在 此处 找到更改日志中的完整更改列表。

祝您编程愉快!

–Chris