Skip to main content

core-add-module

Add a new module to the core package (src/packages/core/). Use when adding shared UI framework infrastructure that all packages can use — e.g., a new extension system feature, a new utility, a new shared component pattern, a new picker, or a new workspace primitive. Core modules are imported as @umbraco-cms/backoffice/{module-name}. Also use when the user says things like "add a module to core", "create a new core feature", or "add shared infrastructure".

Quellinformationen

Repository
umbraco/Umbraco-CMS
Letzte Quellaktivität
27. März 2026 um 11:35
Erkannte Sprache von SKILL.md
Englisch
Sterne
5.265
Forks
2.930

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
core-add-module
description
Add a new module to the core package (src/packages/core/). Use when adding shared UI framework infrastructure that all packages can use — e.g., a new extension system feature, a new utility, a new shared component pattern, a new picker, or a new workspace primitive. Core modules are imported as @umbraco-cms/backoffice/{module-name}. Also use when the user says things like "add a module to core", "create a new core feature", or "add shared infrastructure".
allowed-tools
Read, Write, Edit, Grep, Glob
# Add Core Module Add a new module to the core package (`src/packages/core/`). ## Naming conventions - **Module names** are **singular** (e.g., `picker`, `sorter`, `entity-flag`, `modal`, `section`) ## What you need from the user 1. **Module name** — What to call it in singular form (kebab-case, e.g., `picker`, `sorter`, `entity-flag`) 2. **Purpose** — What shared infrastructure this provides ## When to add to core vs. create a new package - **Core module**: Shared UI framework infrastructure used by multiple packages — extension primitives, pickers, validation, repository base classes, workspace utilities. - **New package**: Domain-specific CMS features (documents, media, webhook). Use the `create-package` skill instead. Core modules should not implement CMS-specific features. They provide the building blocks that CMS feature packages use. ## Files to create ``` src/packages/core/{module-name}/ ├── index.ts # Public API exports ├── manifests.ts # Extension registrations (if any) ├── constants.ts # Module constants └── types.ts # Module types ``` ## Step 1: Create the module directory and files ### {module-name}/index.ts The public API. Only export what other packages need: ```typescript export * from './constants.js'; export type * from './types.js'; ``` Use `export type *` for type-only exports. ### {module-name}/manifests.ts Extension registrations for this module: ```typescript export const manifests: Array<UmbExtensionManifest> = [ // Extension registrations ]; ``` If the module has no extensions (pure utility), export an empty array. ### {module-name}/constants.ts ```typescript // Aliases, context tokens, entity types ``` ### {module-name}/types.ts ```typescript // Type definitions, interfaces, meta types ``` ## Step 2: Wire into core's manifests.ts Add the module's manifests to `src/packages/core/manifests.ts`: ```typescript import { manifests as {moduleName}Manifests } from './{module-name}/manifests.js'; // In the manifests array: ...{moduleName}Manifests, ``` The imports are in alphabetical order — insert in the right position. ## Step 3: Add entry point to core's vite.config.ts Add the module to the `entry` object in `src/packages/core/vite.config.ts`: ```typescript '{module-name}/index': './{module-name}/index.ts', ``` The entries are in alphabetical order — insert in the right position. This tells Vite to build the module as a separate entry point. ## Step 4: Register the subpath export Add to the `exports` field in the root `package.json` (`src/Umbraco.Web.UI.Client/package.json`): ```json "./{module-name}": "./dist-cms/packages/core/{module-name}/index.js" ``` This enables imports like `@umbraco-cms/backoffice/{module-name}`. ## Step 5: Regenerate TypeScript config ```bash npm run generate:tsconfig ``` This updates `tsconfig.json` paths so the new module resolves correctly in TypeScript. ## How consumers import After registration, other packages import from the module like: ```typescript import { MyThing } from '@umbraco-cms/backoffice/{module-name}'; import type { MyType } from '@umbraco-cms/backoffice/{module-name}'; ``` ## Reference: existing core modules to study - **Simple utility**: `src/packages/core/culture/` — repository + components, minimal surface - **Extension primitive**: `src/packages/core/entity-action/` — kinds, base classes, shared element - **Infrastructure**: `src/packages/core/repository/` — base classes for the data access pattern ## Checklist - [ ] Module directory created under `src/packages/core/` - [ ] `index.ts` exports only the public API - [ ] `manifests.ts` exports extension registrations (or empty array) - [ ] `constants.ts` and `types.ts` created - [ ] Module manifests imported in `src/packages/core/manifests.ts` (alphabetical order) - [ ] Entry point added to `src/packages/core/vite.config.ts` (alphabetical order) - [ ] Subpath export added to root `package.json` - [ ] `npm run generate:tsconfig` executed - [ ] Compiles: `npm run compile`
Auf GitHub ansehen