新闻详情

新闻详情

首页 / 资讯中心 / 详情

wp-calypso 仓库 apps 目录全解析:独立应用的组织、构建与校验实践

发布时间:2026/11/1 8:02:31来源:尧图网络
wp-calypso 仓库 apps 目录全解析:独立应用的组织、构建与校验实践
前端CMS【免费下载链接】wp-calypsoThe JavaScript and API powered WordPress.com项目地址https://gitcode.com/gh_mirrors/wp/wp-calypso点击查看免费下载导读apps/是 wp-calypso 这个超大 Monorepo 中专门承载独立可部署产物的目录——这里的每一个子项目都能产出类似二进制的独立构建物被部署到 Calypso 主应用之外的场景例如 WordPress.com 插件、widgets.wp.com域名下的 iframe 应用等。本文围绕 apps/README.md 的核心约定结合 monorepo 文档 与仓库内真实应用的package.json完整讲解 apps 与 packages 的定位差异、手动构建流程、package.json的 ESLint 校验机制以及新增一个 app 的标准路径帮助你准确理解并操作这个目录。apps 目录的定位独立构建物而非共享库按 apps/README.md 的原始定义apps目录用于容纳能够产出独立、类二进制输出的项目并被部署到其他位置projects that can produce independent, binary-like outputs deployed elsewhere。这带来两个关键推论不发布到 NPM这些项目通常设置private: true例如 apps/notifications/package.json、apps/odyssey-stats/package.json、apps/blaze-dashboard/package.json 均是如此不参与yarn start它们不属于 Calypso 开发服务器的启动链路需要按各自package.json中的脚本单独构建。与 apps 相对的是需要发布为 NPM 包可能被 Calypso 其他模块复用的共享代码统一放在/packages目录。monorepo 文档 给出了更完整的模块布局除apps、packages外还包括clientCalypso 主应用、desktopWordPress.com 桌面应用拥有独立的依赖树与yarn.lock以及test/e2e端到端测试包。从仓库现状可以验证这一布局。apps/目前包含 8 个子应用目录包名部署/用途apps/notificationsautomattic/notificationsWordPress.com 通知面板既内嵌于 Calypso也通过 iframe 在非 Calypso 站点运行apps/blaze-dashboardautomattic/blaze-dashboard经由 Jetpack 插件在 wp-admin 内提供的 Blaze 推广面板apps/odyssey-statsautomattic/odyssey-stats经由 Jetpack 插件在 wp-admin 内提供的 Calypso 统计apps/help-centerautomattic/help-center-app供 Jetpack 使用的帮助中心应用apps/agents-managerautomattic/agents-manager-app供 Jetpack 使用的 AI Agents 管理应用apps/wpcom-block-editorautomattic/wpcom-block-editorWordPress.com 集成场景的块编辑器工具集apps/happy-blockshappy-blocksWordPress.com 论坛、支持等站点上使用的块apps/o2-blocksautomattic/o2-blockso2 主题的 Gutenberg 扩展以 apps/notifications/README.md 为例它明确写道该面板直接在 Calypso 内部运行也通过iframe在非 Calypso 的 WordPress.com 站点上运行iframe 版本托管于https://wordpress.com/widgets/notifications/或遗留地址https://widgets.wp.com/notifications/。这正是部署到 Calypso 之外的典型场景。构建 Apps手动触发与主构建隔离apps 与 packages 在构建上的核心区别是packages 的prepare脚本会在仓库根目录执行yarn时自动运行而 apps不会。因此必须手动进入 app 目录构建这是 apps/README.md 中特别强调的一点。cd apps/app-name yarn build # 也可以运行 app 的 package.json 中任意其他脚本 # 例如 FSE 插件的开发与同步命令 yarn dev --sync从仓库中各 app 的实际脚本看yarn build通常被定义为生产构建且多数会串联构建 同步两步。以几个代表性应用为例apps/notifications/package.jsonbuild: NODE_ENVproduction yarn dev而dev内部调用calypso-apps-builder --localPath dist --remotePath /home/wpcom/public_html/widgets.wp.com/notifications即把dist产物同步到 WordPress.com 生产环境的 widgets 目录apps/blaze-dashboard/package.json 与 apps/odyssey-stats/package.json同样采用build: NODE_ENVproduction yarn dev模式目标路径分别为widgets.wp.com/blaze-dashboard/v1与widgets.wp.com/odyssey-stats/v1apps/wpcom-block-editor/package.json 则提供了两种构建build:wpcom-block-editorNODE_ENVproduction calypso-build与build:wpcom-block-editor-no-minifyNODE_ENVdevelopment calypso-build便于调试未压缩产物apps/happy-blocks/package.json 支持按块粒度构建例如build:pricing-plans、build:search-card、build:universal-header等通过calypso-build --env blockxxx指定。从源码结构可以看出这些构建统一基于automattic/calypso-build与automattic/calypso-apps-builder两个工作区依赖完成前者负责 webpack/babel 编译后者负责把本地产物同步到远端部署路径。monorepo 文档还提供了通过yarn workspace从仓库根目录直接构建某个 app 的等价写法yarn workspace automattic/wpcom-block-editor run build这在不想反复cd的场景下更为便捷。开发与同步--sync的沙盒工作流对于需要部署验证的 appapps/notifications/README.md 描述了典型的开发循环yarn dev --sync将开发构建同步到沙盒yarn build --sync将生产构建同步到沙盒。前提是你在~/.ssh/config中配置了名为wpcom-sandbox的别名且需要对widgets.wp.com域名做沙盒化sandbox处理。构建产物默认落在各 app 的dist目录。TeamCity 也会在每个提交上自动生成 app 构建产物可在 PR 检查中查找Notifications (WPCom Plugins)任务并进入 artifacts 标签获取。新增一个 App入口与规范apps/README.md 明确指出如果要在本目录新增项目只需新建一个子目录并遵循 Monorepo 文档 的约定。结合该文档一个 app或 package的标准布局是package.json # 模块的 package.json README.md # 模块说明文档 CHANGELOG.md # 变更日志 src/ # 源码目录 index.js # 导出模块全部能力 module-a.js # 具体模块 test/ # 测试目录需要特别注意的是monorepo 文档 对是否应该做成包给出了明确的门槛一个包应当只有一个清晰目的避免厨房水槽式的工具包应当有清晰、文档化的公共 API依赖要求如是否依赖 WP.com REST API、是否只能在特定上下文运行应在 README 中显式说明。这一准则同样适用于判断一个新项目应该放进apps/独立部署产物还是packages/可发布共享库。校验 package.jsonESLint 与例外机制package.json本身会被 ESLint 当作可校验对象apps/README.md 给出了校验命令yarn eslint apps/*/package.jsonmonorepo 文档 中的命令则同时覆盖 apps 与 packagesyarn eslint packages/*/package.json apps/*/package.json。这意味着所有新增 app 的package.json必须通过 lint 规则仓库中对应规则实现位于 packages/eslint-plugin-package-json常见的约束包括字段顺序、sideEffects声明、依赖声明方式等。如果需要豁免某些规则可以在 app 目录内添加./eslintrc.js文件并禁用相关规则——这是官方文档提供的标准例外途径。sideEffects 与 tree-shaking 的隐性要求虽然apps/README.md未展开但 monorepo 文档 对package.json中sideEffects字段有严格要求且直接影响生产构建结果如果包内包含css、scss文件必须将其列入sideEffects数组否则开发构建正常、但生产构建的 tree-shaking 会把这些样式文件丢弃。正确写法{ sideEffects: [ *.css, *.scss ] }仓库中的 app 也遵循这一实践例如 apps/help-center/package.json 声明了sideEffects: [ *.css, *.scss, ./config.js ]把config.js也显式标记为有副作用。测试与 CI 集成apps 的测试与主仓库测试共用同一套工具链。以 apps/notifications/package.json 与 apps/odyssey-stats/package.json 为例均提供test:js脚本yarn run -T test-apps apps/notifications yarn run -T test-apps apps/odyssey-stats其中-T表示在 Monorepo 根目录执行Yarn v2 的--top-level简写test-apps是根 package.json 中定义的聚合测试脚本。在 CITeamCity侧各 app 通过teamcity:build-app脚本接入构建流水线。部分 app 还附加了质量门禁例如 apps/odyssey-stats/package.json 的teamcity:build-app为yarn run build yarn run test:size yarn run verify:css-scope即在构建后还会执行size-limit体积检查与 CSS 作用域校验脚本见 apps/odyssey-stats 下的bin/verify-css-scope.js确保嵌入 wp-admin 的产物体积与样式隔离可控。这表明 apps 目录并非简单的旁路项目而是与 Calypso 共享工程规范的一等公民。小结apps/目录是 wp-calypso Monorepo 中独立部署物的标准化家园它与packages/以是否发布 NPM、是否参与主构建为分界线每个 app 通过自己的package.json脚本通常基于calypso-buildcalypso-apps-builder完成构建与远端同步新增 app 遵循 Monorepo 文档 的目录与package.json规范并接受 ESLint 的统一校验。对于希望在 Calypso 之外如 Jetpack 插件、widgets.wp.com域名部署前端功能模块的开发者而言这里就是标准入口——动手前先读 apps/README.md 与 monorepo.md再对照任一现有 app如 notifications的package.json起步是最稳妥的路径。赞分享前端CMS【免费下载链接】wp-calypsoThe JavaScript and API powered WordPress.com项目地址https://gitcode.com/gh_mirrors/wp/wp-calypso点击查看免费下载相关推荐wp-calypso Blaze Dashboard 独立应用架构解析wp-admin 内嵌广告管理 SPA 的构建与开发实践wp calypso Blaze Dashboard 独立应用架构解析wp admin 内嵌广告管理 SPA 的构建与开发实践 导读 Blaze Dashbo前端CMSwp-calypso Blaze Dashboard 独立应用全指南目录架构、hashbang 路由、Gridicon 替换与构建发布实战wp calypso Blaze Dashboard 独立应用全指南目录架构、hashbang 路由、Gridicon 替换与构建发布实战 Blaze Das前端CMSOpenUtau终极指南开源虚拟歌手编辑器的完整技术手册OpenUtau终极指南开源虚拟歌手编辑器的完整技术手册 您是否曾经面临传统虚拟歌手软件功能受限、操作复杂、跨平台支持不足的困扰OpenUtau作为现代化的前端CMS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/1 1:42:41

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/1 2:34:07

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/1 2:01:57

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/1 3:13:10

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/1 2:11:52

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/1 3:23:38

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉