mcpField
W
wix-cli-extension-registration

wix-cli-extension-registration

github.com/wix开发36285 次安装今天更新
代码仓库

关于 wix-cli-extension-registration

为 Wix CLI 应用开发者提供扩展注册指南,说明如何将扩展加入 src/extensions.ts。涵盖直接注册与大型应用的集中导出模式,并列出常见故障排查方法。

主要功能

  1. 01在 src/extensions.ts 注册扩展
  2. 02直接导入并调用 .use()
  3. 03集中导出后批量注册
  4. 04排查路径与导出名称错误

适用场景

  1. 01创建新扩展后使其加入构建流程
  2. 02检查扩展未显示或未运行的原因

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/wix/skills --skill wix-cli-extension-registration

安装后在 Claude Code 中输入/wix-cli-extension-registration确认已加载。

详细介绍

Wix 应用注册

创建任何扩展文件后,都必须更新主 src/extensions.ts 文件,以便向应用注册该扩展。

注册为何重要

Wix CLI 通过 src/extensions.ts 文件发现扩展——它是唯一入口,用于告知构建系统有哪些扩展。未注册时:

  • 控制面板页面不会显示在侧边栏中
  • 网站小组件不会显示在 Wix Editor 中
  • 服务插件不会在结账流程中被调用
  • 事件处理程序不会收到 Webhook 投递
  • 嵌入式脚本不会注入网站页面

“我的扩展无法正常工作”最常见的原因,就是此文件中缺少 .use() 调用。

简单模式(推荐用于小型应用)

src/extensions.ts - 直接导入并注册扩展:

import { app } from "@wix/astro/builders";
import { dataExtension } from "./extensions/data/extensions.ts";
import { dashboardpageMyPage } from "./extensions/dashboard/pages/my-page/extensions.ts";
import { embeddedscriptMyScript } from "./extensions/site/embedded-scripts/my-script/extensions.ts";

export default app()
  .use(dataExtension)
  .use(dashboardpageMyPage)
  .use(embeddedscriptMyScript);

每个新扩展的步骤:

  1. 从其 extensions.ts 文件导入扩展
  2. 在应用链中添加 .use(extensionName)
  3. 将多个扩展串联起来

高级模式(适用于大型应用)

src/index.ts - 重新导出所有扩展:

export { dashboardpageMyPage } from "./extensions/dashboard/pages/my-page/extensions";
export { embeddedscriptMyScript } from "./extensions/site/embedded-scripts/my-script/extensions";
export { dataExtension } from "./extensions/data/extensions";

src/extensions.ts - 以编程方式注册所有扩展:

import { app } from "@wix/astro/builders";
import * as allExtensions from "./index";

const extensionList = Object.values(allExtensions);

const appBuilder = app();
extensionList.forEach((extension) => {
  appBuilder.use(extension);
});

export default appBuilder;

无需注册的扩展类型

以下扩展类型不需要 extensions.ts 文件:

  • Backend API - Astro 服务端点会自动发现

命名约定

扩展导出名称遵循以下模式:{extensiontype}{CamelCaseName}

示例:

  • dashboardpageCartPopupManager
  • dashboardpluginBlogPostsBanner
  • dashboardmenupluginExportPosts
  • embeddedscriptCouponPopup
  • sitewidgetCountdownWidget
  • sitepluginProductBadge
  • ecomshippingratesCustomShipping

类型前缀是小写且不含分隔符的扩展类型名称。

故障排除

症状原因解决方法
扩展完全没有显示缺少 .use() 调用在 src/extensions.ts 中添加导入和 .use(extensionName)
构建时报错“Cannot find module”导入路径错误确认导入路径与实际文件位置一致(相对于 src/)
扩展已注册但无法正常工作导出名称不匹配确保扩展文件中的导出名称与 extensions.ts 中的导入名称一致
有多个扩展,但只有部分生效链不完整检查每个扩展是否都同时具有导入和 .use() 调用
.use() 上出现 TypeScript 错误导出类型错误确保扩展文件使用正确的构建器方法(例如,extensions.dashboardPage() 而不是 extensions.embeddedScript())

评论

支持 Markdown