Phoenix 包生态全景:读懂 `mix.phx.new` 为你生成的所有依赖
Phoenix 包生态全景读懂mix.phx.new为你生成的所有依赖【免费下载链接】phoenixPeace of mind from prototype to production项目地址: https://gitcode.com/gh_mirrors/ph/phoenix导读每个由mix phx.new生成的新 Phoenix 应用都自带一套精心挑选的依赖它们分别负责数据库访问、HTTP 请求生命周期、实时交互、国际化、邮件、监控等职责。本文以官方Packages Glossary为主线结合本仓库的生成器模板与框架源码逐一拆解这些包的用途、在项目中的位置以及如何通过生成器选项按需裁剪帮助你建立对 Phoenix 技术栈的全局认知并能在自己的mix.exs中做出明智选择。从mix phx.new生成的依赖说起Phoenix 官方指南的 Up and Running 中明确说明默认情况下mix phx.new生成的应用程序会包含若干可选依赖例如Ecto——用于与 PostgreSQL、MySQL 等数据存储通信可通过--no-ecto跳过Phoenix.HTML、TailwindCSS、Esbuild——用于 HTML 应用可通过--no-html和--no-assets跳过Phoenix.LiveView——用于构建实时、交互式 Web 应用可通过--no-live跳过。也就是说一个 Phoenix 应用到底依赖哪些包并不是固定的而是由生成器按你的选择动态拼装出来的。生成器的依赖清单模板位于 installer/templates/phx_single/mix.exs.eex你可以直接查看deps/0函数来确认每种选项会引入哪些包。下面我们按官方Packages Glossary的分类逐一认识这些包。四大核心包撑起 Phoenix 主干的基石Phoenix —— Web 框架本体Phoenix 即本仓库mix.exs中app: :phoenix是整个框架的核心提供路由、控制器、视图、Endpoint、Channel、Socket 等 MVC 骨架。作为开发者的主战场其余所有包都是围绕它运转的。关于框架本身的完整文档仓库内的官方指南从 Overview 起步涵盖 目录结构、请求生命周期、路由、控制器 等核心主题。从仓库根目录的 mix.exs 可以看到Phoenix 框架自身也依赖了一批基础库包括plug、plug_crypto——连接抽象与加密签名telemetry——遥测事件基础设施phoenix_pubsub——分布式发布订阅phoenix_template——模板编译与渲染websock_adapter——WebSocket 适配层可选依赖plug_cowboy、banditWeb 服务器适配器与jasonJSON 编码。Plug —— 连接抽象与请求-响应生命周期Plug 定义了可组合模块的规范与便捷设施是负责连接抽象connection abstraction和常规请求-响应生命周期的包。在 Phoenix 中从 Endpoint 到 Router 再到 Controller整条请求管线本质上就是一层层 Plug 的串联。想要深入理解 HTTP 请求在 Phoenix 中如何流转Plug 指南 与 请求生命周期指南 是必读的两份材料。Ecto —— 数据库包装与语言内查询Ecto 是 Elixir 生态的语言内查询language integrated query与数据库包装器。Phoenix 官方 Ecto 指南 指出Phoenix 通过 Ecto 内置支持 PostgreSQLpostgrex、MySQLmyxql、MSSQLtds、ETSetso与 SQLite3ecto_sqlite3。新生成的项目默认携带 Ecto 与 PostgreSQL 适配器可用--database切换、用--no-ecto移除。结合生成器模板可以看到带 Ecto 的项目会额外引入phoenix_ecto、ecto_sql和对应的数据库适配器包如postgrex并生成ecto.setup、ecto.reset、ecto.create、ecto.migrate等 mix 别名见 installer/templates/phx_single/mix.exs.eex。Phoenix LiveView —— 服务端渲染的实时交互Phoenix LiveView 让你用服务端渲染的 HTML构建丰富、实时的用户体验所有状态保留在服务端客户端只接收页面变更的 diff。LiveView 项目同时定义了Phoenix.Component组件化 UI 的基石与HEEx 模板引擎~Hsigil这两者在普通请求渲染和实时应用中都被用来渲染 HTML 内容。从源码角度LiveView 指南 guides/live_view.md 中说明LiveView 首次页面加载走常规请求生命周期随后通过 Phoenix Channels 建立双向持久连接。新项目模板中LiveView 相关依赖包括phoenix_live_view、phoenix_live_reload仅 dev 环境以及用于测试的lazy_html。日常开发必备ExUnit、Gettext、SwooshExUnit —— 内置测试框架ExUnit 是 Elixir 自带的测试框架Phoenix 应用的单元测试、控制器测试、Channel 测试都建立在其之上。仓库中test/目录下的测试如 test/phoenix/controller/controller_test.exs、test/phoenix/channel_test.exs均由 ExUnit 驱动。相关官方指南见 测试总览、控制器测试 与 Channel 测试。Gettext —— 国际化与本地化Gettext 通过 GNUgettext工具链为应用提供**国际化i18n与本地化l10n**能力。新项目模板默认携带{:gettext, ~ 1.0}见 installer/templates/phx_single/mix.exs.eex并在priv/gettext目录中维护.po/.pot翻译文件。生成器还内置了 gettext 相关的文件模板见 installer/templates/phx_gettext。Swoosh —— 邮件组合、投递与测试Swoosh 是一个用于编写、投递与测试邮件的库同时被mix phx.gen.auth认证代码生成器用作邮件投递后端。带--mailer选项的新项目会引入{:swoosh, ~ 1.16}与 HTTP 客户端req并生成Mailer模块模板见 installer/templates/phx_mailer。生成认证代码后密码重置、确认链接等邮件都由 Swoosh 负责发出。底层支撑三件套HTML、Ecto 桥接与 PubSubPhoenix HTML —— 安全地操作 HTML 与表单Phoenix HTML 提供在普通与实时应用中安全构建 HTML 和表单的基础构件例如link/2、form_for/1等辅助函数。在 Phoenix 框架自身的 mix.exs 中phoenix_html作为:docs与:test环境依赖出现说明它也是框架文档与测试基础设施的一部分。Phoenix Ecto —— 连接 Phoenix 与 Ecto 的插件与协议Phoenix Ecto 提供在 Phoenix 中使用 Ecto 所需的插件plugs与协议实现其中最核心的是Phoenix.Ecto.SQL与Phoenix.Ecto.CheckRepoStatus。新项目模板在ecto分支下引入{:phoenix_ecto, ~ 4.5}与{:ecto_sql, ~ 3.13}见 installer/templates/phx_single/mix.exs.eex。搭配 Ecto 指南 阅读可以完整理解 schema、changeset、migration 与 Repo 的关系。Phoenix PubSub —— 带 Presence 支持的分布式发布订阅Phoenix PubSub 是带 presence 支持的分布式 pub/sub 系统是 Channel 广播、LiveView 状态同步与 Presence 追踪的底层传输机制。它在 Phoenix Endpoint 源码中被封装为broadcast/4、subscribe/3等宏并通过:pubsub_server配置项定位具体的 PubSub 服务器默认超时:pubsub_timeout_ms为 2000ms见 lib/phoenix/endpoint.ex。Presence 功能则位于 lib/phoenix/presence.ex其模块文档说明Phoenix.Presence定义了一个 supervisor 与实现Phoenix.Tracker行为的模块通过Phoenix.PubSub广播 presence 更新使用前需在children中把 Presence 放在{Phoenix.PubSub, name: MyApp.PubSub}之后、MyAppWeb.Endpoint之前。多节点场景下广播消息只按每个额外节点一条转发因此集群扩展的开销几乎可以忽略见 Channels 指南。观测与监控LiveDashboard 与 Telemetry MetricsPhoenix LiveDashboard —— 实时性能监控与调试Phoenix LiveDashboard 为 Phoenix 开发者提供实时的性能监控与调试工具可查看请求延迟、内存占用、ETS 表、进程信息等运行时指标。新项目在dashboard选项下引入{:phoenix_live_dashboard, ~ 0.8.3}见 installer/templates/phx_single/mix.exs.eex挂载在路由的/dashboard路径下。Telemetry Metrics —— 基于 Telemetry 事件的指标定义接口Telemetry Metrics 提供基于 Telemetry 事件定义指标的通用接口。:telemetry库允许应用在生命周期各阶段发射事件Telemetry 将事件名与处理器存储在 ETS 表中事件触发时查找并调用对应处理器Telemetry.Metrics则用于描述哪些事件、如何聚合为哪种指标。新项目模板默认引入{:telemetry_metrics, ~ 1.0}与{:telemetry_poller, ~ 1.0}见 installer/templates/phx_single/mix.exs.eex并生成一个 Telemetry supervisor模板见 installer/templates/phx_web/telemetry.ex.eex它负责管理 Telemetry 进程生命周期并定义metrics/0。更详细的埋点与上报方式参见 Telemetry 指南。在mix.exs里验证你的依赖全景把上述内容落到实际项目新生成应用的mix.exsdeps/0大致会呈现如下结构依据 installer/templates/phx_single/mix.exs.eex 整理具体以你生成时的选项为准defp deps do [ {:phoenix, ~ 1.7}, # 框架本体版本随生成器更新 # Ecto 与数据库--no-ecto 可去掉 {:phoenix_ecto, ~ 4.5}, {:ecto_sql, ~ 3.13}, {:postgrex, 0.0.0}, # HTML 与实时交互--no-html / --no-live 可去掉 {:phoenix_html, ~ 4.1}, {:phoenix_live_reload, ~ 1.2, only: :dev}, {:phoenix_live_view, ~ 1.2.0}, # 资产构建 {:esbuild, ~ 0.10, runtime: Mix.env() :dev}, {:tailwind, ~ 0.5, runtime: Mix.env() :dev}, # 邮件--no-mailer 可去掉 {:swoosh, ~ 1.16}, {:req, ~ 0.5}, # 观测 {:telemetry_metrics, ~ 1.0}, {:telemetry_poller, ~ 1.0}, {:phoenix_live_dashboard, ~ 0.8.3}, # 国际化 {:gettext, ~ 1.0}, # 集群 {:dns_cluster, ~ 0.2.0}, # Web 服务器适配器 {:bandit, ~ 1.0} # 或 {:plug_cowboy, ~ 2.7} ] end从这份清单可以清晰地看出官方Packages Glossary的编排逻辑核心包Phoenix、Plug、Ecto、LiveView决定应用骨架支撑库Phoenix HTML、Phoenix Ecto、Phoenix PubSub填充 MVC 与实时的细节工具包ExUnit、Gettext、Swoosh覆盖测试、国际化与邮件监控包LiveDashboard、Telemetry Metrics保障生产可观测性。开发者在自己的项目中增删依赖时可以对照此图谱判断某个能力应该由哪个包提供、是否需要保留、以及去掉后会影响哪些功能例如去掉phoenix_pubsub会导致 Channel 广播与 Presence 失效。小结主次分明四大核心包Phoenix、Plug、Ecto、Phoenix LiveView构成应用的骨架与大部分业务代码的落点按需组合mix phx.new的--no-ecto、--no-html、--no-assets、--no-live、--no-mailer、--no-dashboard等选项直接决定依赖清单运行时也可自行增删验证依据生成器的真实依赖列表可查看 installer/templates/phx_single/mix.exs.eex框架自身依赖见根目录 mix.exsPubSub 与 Presence 的实现分别位于 lib/phoenix/endpoint.ex 与 lib/phoenix/presence.ex。后续当你需要深入某个包的用法时官方指南是最好的起点数据建模读 guides/ecto.md实时通信读 guides/real_time/channels.md 与 guides/real_time/presence.md交互式页面读 guides/live_view.md可观测性读 guides/telemetry.md。【免费下载链接】phoenixPeace of mind from prototype to production项目地址: https://gitcode.com/gh_mirrors/ph/phoenix创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Rome 无障碍 lint 规则 useMediaCaption 详解:强制 audio/video 元素提供字幕轨道

Rome 无障碍 lint 规则 useMediaCaption 详解:强制 audio/video 元素提供字幕轨道

开发工具CLILint格式化静态分析代码质量构建工具 【免费下载链接】tools Unified developer tools for JavaScript, TypeScript, and the web 项目地址: https://gitcode.com/gh_mirrors/to/tools 点击查看 免费下载 本篇技术指南聚焦 Rome(本仓库统一 …

2026/9/20 3:21:18 阅读更多 →
换个模型就得重写调用代码?TaoToken 这样改 LangChain 的 ChatOpenAI base_url

换个模型就得重写调用代码?TaoToken 这样改 LangChain 的 ChatOpenAI base_url

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 3:21:18 阅读更多 →
团队AI编程助手选型:多人协作能力才是核心,六张底牌看清差异

团队AI编程助手选型:多人协作能力才是核心,六张底牌看清差异

最近好几个团队的负责人跟我聊起编程助手的选型,口径出奇一致:“我们买了XX的个人版,大家用得挺嗨,一上多人协作就完蛋,代码风格乱七八糟,权限也没法管,最后只能退回去。”这种情形见多了之后&a…

2026/9/20 3:21:18 阅读更多 →

最新新闻

把Claude Code接入Ollama:本地开源模型替代官方API的完整实践

把Claude Code接入Ollama:本地开源模型替代官方API的完整实践

上个月我在折腾本地 AI 编程工具的时候,发现 Claude Code 这种终端型编程助手确实带感,能直接在项目里读文件、改代码、跑命令。但它默认绑定 Anthropic 官方 API,按 token 计费,重度用下来钱包真的顶不住。身边一个同事神神秘秘地…

2026/9/20 4:02:58 阅读更多 →
dotnet/runtime 仓库 Mono 运行时构建指南:从环境准备到 Hello World 全流程

dotnet/runtime 仓库 Mono 运行时构建指南:从环境准备到 Hello World 全流程

dotnet/runtime 仓库 Mono 运行时构建指南:从环境准备到 Hello World 全流程 【免费下载链接】runtime .NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps. 项目地址: https://gitcode.com/GitHub_Trending/runtime6/runtime Mono…

2026/9/20 4:02:58 阅读更多 →
测试左移实践:从提交到部署的完整质量门禁链路

测试左移实践:从提交到部署的完整质量门禁链路

从提交到部署这条线,很多团队其实是断的:开发在本地把代码写完,commit 一推,后面发生了什么基本靠猜。CI 挂了就在群里喊人看,部署出了问题就在服务器上翻日志,测试环境不稳定就互相甩锅。我早年也这么干过…

2026/9/20 4:02:58 阅读更多 →
Dijkstra算法课程设计实战:邻接矩阵与最短路径输出完整解析

Dijkstra算法课程设计实战:邻接矩阵与最短路径输出完整解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 4:02:58 阅读更多 →
CANN ops-math OnesLike 算子全解析:原型设计、两段式 aclnn 调用与 NPU 源码实现

CANN ops-math OnesLike 算子全解析:原型设计、两段式 aclnn 调用与 NPU 源码实现

算子库人工智能CANN 【免费下载链接】ops-math 本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-math 点击查看 免费下载 OnesLike 是 CANN ops-math 数学算子库中用于"复制形状、填充…

2026/9/20 4:02:58 阅读更多 →
变频器试验与测试:非正弦波形谐波功率测量与GB/T12668

变频器试验与测试:非正弦波形谐波功率测量与GB/T12668

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 4:01:57 阅读更多 →

日新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →