sanity-default-plugins

bởi sanity-io

Tạo và kết nối các plugin lõi Sanity bằng cách sử dụng quy ước plugin mặc định của monorepo. Sử dụng khi thêm, sửa đổi hoặc xem xét các plugin trong…

npx skills add https://github.com/sanity-io/sanity --skill sanity-default-plugins

Sanity Core Plugin

Start Here

Before adding a core plugin, read the sanity-plugin-authoring skill at ../sanity-plugin-authoring/SKILL.md to understand the general Sanity plugin API and what plugins can provide. Then inspect nearby plugins and these files:

  • packages/sanity/src/core/config/resolveDefaultPlugins.ts
  • packages/sanity/src/core/config/types.ts
  • packages/sanity/src/core/config/studio/types.ts
  • A similar plugin under packages/sanity/src/core/*/plugin/

The new plugin should be added inside core so it can be imported into the default plugins.

Prefer local patterns over new abstractions.

Plugin Shape

Use definePlugin and export a stable internal name constant:

import {definePlugin} from '../../config/definePlugin'

export const FEATURE_NAME = 'sanity/feature'

export const feature = definePlugin({
  name: FEATURE_NAME,
  studio: {
    components: {
      layout: FeatureStudioLayout,
    },
  },
  i18n: {
    bundles: [featureUsEnglishLocaleBundle],
  },
})

Use ../../config/definePlugin when matching existing internal plugin files. ../../config is also available in some folders.

Locale Resources

Default core plugins that render UI text should add a locale resource bundle. Follow the pattern from packages/sanity/src/core/singleDocRelease:

  • packages/sanity/src/core/<feature>/i18n/index.ts: exports the locale namespace, US English bundle, and resource key type.
  • packages/sanity/src/core/<feature>/i18n/resources.ts: exports default locale strings and keyof resource type.
  • packages/sanity/src/core/<feature>/plugin/index.ts: imports the bundle and registers it under i18n.bundles.

Example i18n/index.ts:

import {type LocaleResourceBundle} from '../../i18n'

export const featureNamespace: 'feature' = 'feature'

export const featureUsEnglishLocaleBundle: LocaleResourceBundle = {
  locale: 'en-US',
  namespace: featureNamespace,
  resources: () => import('./resources'),
}

export type {FeatureLocaleResourceKeys} from './resources'

Example i18n/resources.ts:

const featureLocaleStrings = {
  'action.example': 'Example',
}

export type FeatureLocaleResourceKeys = keyof typeof featureLocaleStrings

export default featureLocaleStrings

Example plugin registration:

import {featureUsEnglishLocaleBundle} from '../i18n'

export const feature = definePlugin({
  name: FEATURE_NAME,
  i18n: {
    bundles: [featureUsEnglishLocaleBundle],
  },
})

Default Plugin Wiring

Default core plugins are listed in resolveDefaultPlugins.ts.

  1. Import the plugin and its name constant.
  2. Add the plugin to defaultPlugins(options) in the desired composition order.
  3. If gated, add a plugin.name === FEATURE_NAME branch in getDefaultPlugins.
  4. Add any required options to DefaultPluginsWorkspaceOptions in types.ts.
  5. In getDefaultPluginsOptions, build default plugin options directly from workspace config defaults and spreads. Do not call config property reducers here; reducers belong to resolved source/workspace config, while default plugin options are a lightweight workspace-level input for plugin insertion.
  6. Update packages/sanity/src/core/config/__tests__/resolveConfig.test.ts with focused default plugin tests:
    • The plugin is not added by default.
    • The plugin is added when the proper config flag is enabled.
  7. Add ordering coverage when plugin order affects UI composition.

Example default option shape:

variants: {
  enabled: false,
  ...workspace.beta?.variants,
}

Remember: user plugins are appended before default plugins in prepareConfig.tsx, then the component middleware chain reverses flattened config order. Check the existing chain before relying on wrapper order.

Verification

For default plugin changes, run:

pnpm vitest run --project=sanity packages/sanity/src/core/config/__tests__/resolveConfig.test.ts

Also run lint/read diagnostics for edited files. Add component-level tests only when the plugin changes runtime rendering beyond insertion.

Thêm skills từ sanity-io

tdd
sanity-io
Phát triển hướng theo kiểm thử với vòng lặp đỏ-xanh-tái cấu trúc. Sử dụng khi người dùng muốn xây dựng tính năng hoặc sửa lỗi bằng TDD, đề cập đến "đỏ-xanh-tái cấu trúc", muốn…
performance-optimization
sanity-io
Tối ưu hóa hiệu suất ứng dụng. Sử dụng khi có yêu cầu về hiệu suất, khi nghi ngờ có suy giảm hiệu suất, hoặc khi Core Web Vitals hoặc thời gian tải…
content-experimentation-best-practices
sanity-io
Hướng dẫn có cấu trúc để thiết kế, thực thi và phân tích các thử nghiệm nội dung nhằm cải thiện tỷ lệ chuyển đổi và mức độ tương tác. Bao gồm các khung giả thuyết, lựa chọn chỉ số, tính toán kích thước mẫu và kiểm định ý nghĩa thống kê trong các thử nghiệm A/B và đa biến. Cung cấp tài nguyên chi tiết về giá trị p, khoảng tin cậy, phân tích lũy thừa và phương pháp Bayes để diễn giải kết quả. Cung cấp các mẫu tích hợp CMS để quản lý biến thể ở cấp trường và kết nối bên ngoài...
content-modeling-best-practices
sanity-io
Hướng dẫn mô hình hóa nội dung có cấu trúc cho thiết kế schema, khả năng tái sử dụng và phân phối đa kênh. Bao gồm các nguyên tắc cốt lõi: coi nội dung là dữ liệu thay vì trang, duy trì nguồn thông tin duy nhất, thiết kế cho các kênh trong tương lai và tối ưu hóa quy trình làm việc của biên tập viên. Cung cấp khung quyết định cho tham chiếu so với đối tượng nhúng, phân tách mối quan tâm và các mẫu tái sử dụng nội dung. Cung cấp hướng dẫn về phân loại và phân lớp cho các phương pháp phẳng, phân cấp và khía cạnh. Áp dụng cho...
portable-text-conversion
sanity-io
Chuyển đổi nội dung HTML và Markdown thành các khối Portable Text cho Sanity. Sử dụng khi di chuyển nội dung từ các CMS cũ, nhập HTML hoặc Markdown vào Sanity,…
portable-text-serialization
sanity-io
Kết xuất và tuần tự hóa Portable Text thành React, Svelte, Vue, Astro, HTML, Markdown và văn bản thuần. Sử dụng khi triển khai kết xuất Portable Text trong bất kỳ giao diện người dùng nào…
sanity-best-practices
sanity-io
Các phương pháp thực hành tốt nhất toàn diện và hướng dẫn tích hợp cho phát triển Sanity CMS trên nhiều framework và chủ đề. Bao gồm hơn 10 tích hợp framework bao gồm Next.js, Nuxt, Astro, Remix, SvelteKit và Angular với các mẫu và hướng dẫn thiết lập dành riêng cho từng framework. Bao gồm các hướng dẫn chủ đề về thiết kế schema, tối ưu hóa truy vấn GROQ, Chỉnh sửa trực quan, Văn bản di động, hình ảnh, TypeGen, bản địa hóa và di chuyển nội dung. Cung cấp cấu trúc tham khảo nhanh để chỉ tải các hướng dẫn liên quan dựa trên loại tác vụ,...
sanity-migration
sanity-io
Lập kế hoạch, triển khai và xem xét việc di chuyển từ các CMS và hệ thống nội dung khác sang Sanity. Sử dụng khi di chuyển hoặc chuyển đổi nền tảng sang Sanity từ AEM, Adobe Experience Manager, Contentful, Strapi, Webflow, WordPress, Payload, Drupal, tệp Markdown/MDX/frontmatter, xuất WXR/XML, API CMS, bản sao cơ sở dữ liệu, HTML tĩnh, hoặc khi thiết kế quy trình trích xuất, chuyển đổi, chuyển đổi Portable Text, di chuyển tài sản, chuyển hướng, xác thực và cắt chuyển.
data-analysisdatabasedevelopment