wp-calypso 中 Automattic for Agencies(A4A)前端的本地开发环境搭建与运行指南
前端CMS【免费下载链接】wp-calypsoThe JavaScript and API powered WordPress.com项目地址https://gitcode.com/gh_mirrors/wp/wp-calypso点击查看免费下载Automattic for Agencies简称 A4A是 wp-calypso 仓库中面向代理合作伙伴agency的完整前端应用覆盖合作伙伴门户、站点管理、市场采购、转介绍、迁移与团队协作等业务。本文以仓库根目录 client/a8c-for-agencies/README.md 为骨架完整讲解在本地拉起 A4A 开发环境的每一步并结合仓库源码解析启动命令、开发配置、路由骨架与代码规范让读者既能照做跑通又能理解其底层工作原理。一、A4A 在 wp-calypso 中的定位wp-calypso 是一个以 JavaScript 与 API 驱动的 WordPress.com 客户端单体仓库A4A 前端是其内部一个独立的业务应用代码集中在client/a8c-for-agencies/目录下。它不是一个孤立页面而是一整套按 section 拆分的单页应用路由根路径/直接映射到a8c-for-agencies模块见 client/sections.js也就是说当运行环境是 A4A 时整站默认进入的就是 A4A 应用所有 A4A 相关 sectionlanding、auth、overview、sites、marketplace、purchases、signup、migrations、client、agency-tier 等在 client/sections.js 中统一注册group均为a8c-for-agencies便于按组做代码分割与按需加载。仓库同时提供了生产环境入口可在线体验其前端效果对应文档所述 https://agencies.automattic.com/本地开发则通过一套专用环境配置与脚本完成。二、环境准备在启动前需要准备以下工具git—— 用于克隆仓库Node.js—— wp-calypso 的构建与开发服务器基于 Node 生态yarn—— 仓库使用 yarn 管理依赖与脚本注意使用 yarn classic即 yarn 1.x与仓库的 yarn.lock 匹配。确认工具就绪后克隆本仓库到本地。仓库根目录的 package.json 中定义了后续要用的全部脚本包括start-a8c-for-agencies等。三、本地启动五步跑通 A4A按照 client/a8c-for-agencies/README.md 的 Getting Started完整步骤如下步骤 1确认基础工具确保git、node、yarn均已安装并在 PATH 中可用。步骤 2克隆仓库将 wp-calypso 仓库克隆到本地git clone https://gitcode.com/gh_mirrors/wp/wp-calypso.git cd wp-calypso步骤 3配置 hosts 文件在本地hosts文件中添加一行127.0.0.1 agencies.localhostLinux / macOS 下编辑/etc/hostsWindows 下编辑C:\Windows\System32\drivers\etc\hosts需要管理员权限。这一行至关重要A4A 开发环境的 hostname 被配置为agencies.localhost见下文配置解析开发服务器绑定该域名浏览器也通过该域名访问否则无法命中正确的开发环境。步骤 4安装依赖并启动在仓库根目录依次执行yarn yarn start-a8c-for-agencies第一条命令安装全部依赖与 yarn.lock 对齐第二条命令以 A4A 开发环境模式启动开发服务器。步骤 5访问应用浏览器打开http://agencies.localhost:3000/看到 A4A 前端即表示启动成功。四、启动命令与配置解析start-a8c-for-agencies背后发生了什么yarn start-a8c-for-agencies并不是一个魔法命令它在 package.json 中被定义为start-a8c-for-agencies: CALYPSO_ENVa8c-for-agencies-development yarn run start即先设置环境变量CALYPSO_ENVa8c-for-agencies-development再执行通用的yarn run start启动脚本。CALYPSO_ENV决定了 wp-calypso 加载哪一套配置——对应到 config/a8c-for-agencies-development.json。该文件是整个 A4A 开发环境的配置中枢关键字段如下配置字段值说明env/env_iddevelopment/a8c-for-agencies-development环境标识全局代码据此判断是否处于 A4A 环境hostnameagencies.localhost开发服务器绑定的域名与 hosts 配置对应port3000开发服务器端口protocolhttp本地开发协议site_nameAutomattic For Agencies站点名称themea8c-for-agencies应用主题oauth_client_id95928OAuth 客户端 ID用于登录授权features见配置功能开关如a4a-signup-v2、a4a/site-migration、a8c-for-agencies等sections见配置启用的 section 清单如 overview、sites、marketplace、purchases、signup、migrations 等logout_url见配置登出跳转地址其中env_id的判定逻辑在 client/lib/a8c-for-agencies/is-a8c-for-agencies.ts 中实现它维护了一个 A4A 环境白名单const a4aEnvironments [ a8c-for-agencies-development, a8c-for-agencies-stage, a8c-for-agencies-horizon, a8c-for-agencies-production, ]; const isA8CForAgencies (): boolean a4aEnvironments.includes( config( env_id ) );也就是说仓库为 A4A 准备了 development、stage、horizon、production 四套环境分别对应 config/ 下的a8c-for-agencies-*.json配置本文本地开发使用的是 development 一套。其他相关脚本package.json 中还提供了两条与 A4A 相关的辅助脚本start-a8c-for-agencies-pPORT3002 CALYPSO_ENVa8c-for-agencies-development yarn run build-server ... yarn run start-build先构建服务端再用构建产物启动适合模拟更接近生产的行为端口为 3002docker-a8c-for-agenciesdocker run -it --env CALYPSO_ENVa8c-for-agencies-production --name wp-calypso --rm -p 80:3000 wp-calypso用 Docker 以 production 环境运行将宿主 80 端口映射到容器 3000。五、应用骨架入口、路由与权限守卫了解入口结构有助于理解 A4A 的运行时行为。入口与根路由client/a8c-for-agencies/index.tsx 是 A4A 的入口模块import page from automattic/calypso-router; import { makeLayout, render as clientRender } from calypso/controller; import { redirectToLandingContext } from ./controller; export default function () { page( /, redirectToLandingContext, makeLayout, clientRender ); }根路径/首先进入redirectToLandingContext如果当前处于 A4A 环境则携带原有查询参数重定向到/landing常量定义于 client/a8c-for-agencies/components/sidebar-menu/lib/constants.tsA4A_LANDING_LINK /landing否则跳到自动特的外部代理页面。路由权限守卫client/a8c-for-agencies/controller.tsx 集中定义了多个路由中间件用于对访问做鉴权与分流requireAccessContext若当前用户已关联 agency通过getActiveAgency读取 Redux 状态再经handleMultiUserSupport按 client/a8c-for-agencies/lib/permission.ts 的isPathAllowed判断路径是否允许不允许则回到/overview未关联 agency 时携带return参数重定向到/landing登录后可返回原路径requireClientAccessContext针对 A4A 客户client侧只有确认用户不是 agency 时才放行否则重定向到A4A_CLIENT_LANDING_LINK/client/landingrequireLegacyClientBillingContext根据getUserBillingType判断只有legacy计费类型的用户才可访问否则跳转客户订阅页requireTierAccessContext结合isPathAllowedForTier校验 agency 层级tier对路径的权限无权时渲染TierPermissionError组件见 client/a8c-for-agencies/sections/agency-tier/tier-permission-error.tsxrequireAmplifyAccessContext检查agency?.amplify?.allowed未开通 Amplify 权限时跳回/overview。这套守卫链说明 A4A 的每个业务 section 都受统一的权限模型约束而不是各自为政。六、功能开关与 section 组织A4A 的功能通过配置中的features与sections两个字段控制二者都在 config/a8c-for-agencies-development.json 中显式声明features中的布尔值决定某功能是否启用。例如本地开发默认打开a4a-signup-v2、a4a-unified-onboarding-tour、a4a/site-migration、a8c-for-agencies等同时默认关闭a4a-bd-checkout、a4a-partner-directory等仍在灰度中的能力sections声明启用哪些 section与 client/sections.js 中的注册表一一对应包括 overview、reports、plugins、sites、marketplace、purchases、referrals、settings、partner-directory、migrations、client、team、agency-tier、woopayments、learn、dev-tools、exclusive-offers、amplify 等。调功能时改配置文件即可不需要改动业务代码这也解释了为什么同一份代码可以支撑 development / stage / horizon / production 四套环境。七、常见问题与排错打开agencies.localhost:3000无响应绝大多数情况是 hosts 未配置或配置了但未生效。确认/etc/hosts或 Windows 的 hosts中存在127.0.0.1 agencies.localhost必要时重启浏览器或刷新 DNS 缓存。端口被占用默认端口 3000可像start-a8c-for-agencies-p那样用PORT3002覆盖同时访问http://agencies.localhost:3002/。依赖安装失败确保使用 yarn classic1.x执行yarn与仓库 yarn.lock 保持一致避免与 yarn berry 的行为差异导致安装异常。想模拟生产形态使用yarn start-a8c-for-agencies-p构建后启动端口 3002或 Docker 方式yarn docker-a8c-for-agenciesproduction 环境映射 80 端口。想确认当前是否运行在 A4A 环境判断逻辑统一收敛在 client/lib/a8c-for-agencies/is-a8c-for-agencies.ts依赖env_id是否属于四个 A4A 环境之一。八、A4A 开发规范要点面向二次开发仓库根目录 client/a8c-for-agencies/AGENTS.md 总结了 A4A 代码的约定开发新功能时建议遵循UI 优先复用wordpress/components的既有控件Button、Modal、VStack/HStack、Spacer、Text列表与表单优先使用DataViews/DataForm抽象而不是自造组件埋点规范面向用户的操作表单提交、弹窗开关、文件上传等通过calypso/state/analytics/actions的recordTracksEvent上报事件名统一使用calypso_a4a_前缀样式规范自定义 CSS 以 client/a8c-for-agencies/style.scss 为参照使用 CSS 逻辑属性如margin-inline-start保证 LTR/RTL 兼容颜色使用--color*语义化 token 而非--studio*文案规范UI 文本使用句子式大小写sentence case使用弯引号完整句子以句号结尾逻辑组织数据获取与副作用逻辑优先抽取为自定义 hookLayoutBody的内容抽到同目录独立组件中保持页面组件可读。九、总结A4A 是 wp-calypso 中独立成体系的一套前端应用配置由CALYPSO_ENV驱动的config/a8c-for-agencies-development.json掌控路由由client/a8c-for-agencies/controller.tsx的权限守卫统一把关功能与 section 由配置显式声明。按本文五步即可在本地完整跑通 A4A 前端后续的二次开发可以沿着 client/a8c-for-agencies/ 目录下的 controller、sections、components 与 lib 继续深入。赞分享前端CMS【免费下载链接】wp-calypsoThe JavaScript and API powered WordPress.com项目地址https://gitcode.com/gh_mirrors/wp/wp-calypso点击查看免费下载相关推荐Calypsowp-calypso从零搭建本地开发环境架构、安装、构建与排错全指南Calypsowp calypso从零搭建本地开发环境架构、安装、构建与排错全指南 本指南以仓库根目录 README.md https://link.gi前端CMSwp-calypso A4ALogo 组件深度指南Automattic for Agencies 品牌 Logo 的四种形态与定制实践wp calypso A4ALogo 组件深度指南Automattic for Agencies 品牌 Logo 的四种形态与定制实践 本指南以 wp cal前端CMSQuickwit UI 前端开发指南环境搭建、本地运行、构建与测试全流程Quickwit UI 前端开发指南环境搭建、本地运行、构建与测试全流程 本篇技术指南聚焦 Quickwit 仓库中 quickwit ui 子项目 qui搜索引擎可观测性日志分析链路追踪后端全文检索创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

LTspice导入厂商SPICE模型:.lib与.sub文件操作及常见报错排查

LTspice导入厂商SPICE模型:.lib与.sub文件操作及常见报错排查

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

2026/9/24 2:29:55 阅读更多 →
PX4、Pixhawk、ArduPilot和APM到底什么关系?一文讲透飞控软硬件选型

PX4、Pixhawk、ArduPilot和APM到底什么关系?一文讲透飞控软硬件选型

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

2026/9/24 2:29:55 阅读更多 →
Linux系统调试课(CPU篇)CPU频率调节与功耗策略

Linux系统调试课(CPU篇)CPU频率调节与功耗策略

文章目录 一、概述 二、为什么需要频率调节 2.1 功耗与频率的关系 2.2 DVFS 调频链路 三、基本概念 3.1 Governor 策略 3.2 OPP 表 四、源码解析 4.1 cpufreq-dt 驱动初始化 4.2 schedutil governor 五、RK3506 OPP 表 5.1 设备树 OPP 定义 六、关键特性与约束 七、调试命令与实…

2026/9/24 2:29:54 阅读更多 →

最新新闻

AI陪伴机器人单文件H5宣传站-一个人怎么写出项目官网

AI陪伴机器人单文件H5宣传站-一个人怎么写出项目官网

11-单文件H5宣传站-一个人怎么写出项目官网系列:AI 伙伴(AI-Partner)——具身智能陪伴机器人 数据接口部署与二次开发篇(11/12)一、先抛问题:项目官网到底需要多重 AI 伙伴(AI-Partner&#xf…

2026/9/24 3:43:42 阅读更多 →
使用 Meshery 构建 NGINX Init Container 与 VHost 多域名托管的弹性设计模式

使用 Meshery 构建 NGINX Init Container 与 VHost 多域名托管的弹性设计模式

云原生微服务运维DevOps 【免费下载链接】meshery Meshery, the cloud native manager 项目地址: https://gitcode.com/GitHub_Trending/me/meshery 点击查看 免费下载 本指南围绕 Meshery Catalog 中一份标记为 resiliency(弹性)类型的 NGI…

2026/9/24 3:42:42 阅读更多 →
RQAlpha事件驱动回测:A股T+1与涨跌停规则实战解析

RQAlpha事件驱动回测:A股T+1与涨跌停规则实战解析

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

2026/9/24 3:42:42 阅读更多 →
EMC四大测试的本质是能量路径物理建模

EMC四大测试的本质是能量路径物理建模

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

2026/9/24 3:42:42 阅读更多 →
STM32简介:从芯片参数到硬件调度系统的工程启蒙

STM32简介:从芯片参数到硬件调度系统的工程启蒙

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

2026/9/24 3:41:42 阅读更多 →
ESP32-P4 Rev 3.0电源优化实战:从供电架构到低功耗调优

ESP32-P4 Rev 3.0电源优化实战:从供电架构到低功耗调优

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

2026/9/24 3:40:41 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

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

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

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

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

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

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

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

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

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

2026/9/23 9:53:41 阅读更多 →

月新闻

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

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

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

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

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

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

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

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

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

2026/9/23 9:53:40 阅读更多 →