Pierwsze kroki z Cmssy CLI
Kompletny przewodnik po instalacji i konfiguracji Cmssy CLI, tworzeniu pierwszego projektu oraz publikowaniu własnych bloków w workspace.
Instalacja
Zainstaluj Cmssy CLI globalnie używając wybranego menedżera pakietów:
npm install -g @cmssy/cli
# lub
pnpm add -g @cmssy/cliWymaganie: Node.js >= 18.0.0
Zweryfikuj instalację:
cmssy --versionSzybki start
Od zera do opublikowanego bloku w 7 krokach:
# 1. Stwórz nowy projekt
cmssy init my-blocks
# 2. Przejdź do katalogu projektu
cd my-blocks
# 3. Zainstaluj zależności
pnpm install
# 4. Połącz się z workspace
cmssy link
# 5. Uruchom serwer deweloperski
cmssy dev
# 6. Stwórz swój pierwszy blok
cmssy create block hero
# 7. Opublikuj swój blok przez pipeline sandbox build
cmssy publish-block heroStruktura projektu
Po uruchomieniu cmssy init Twój projekt wygląda tak:
my-blocks/
├── cmssy.config.js # Konfiguracja projektu
├── package.json # Zależności (React 19, Next.js, Tailwind v4)
├── tsconfig.json # Konfiguracja TypeScript
├── postcss.config.js # PostCSS + Tailwind
├── .env # Dane dostępowe API (nigdy nie commituj!)
├── .env.example # Szablon dla .env
├── blocks/ # Twoje własne bloki
│ └── hero/ # Przykładowy blok
│ ├── config.ts # Definicja schematu bloku
│ ├── package.json # Metadane i wersja bloku
│ ├── preview.json # Dane podglądu dla serwera dev
│ └── src/
│ ├── Block.tsx # Komponent React
│ ├── index.tsx # Wrapper eksportu + import CSS
│ ├── index.css # Style bloku
│ └── block.d.ts # Automatycznie generowane typy TypeScript
├── templates/ # Szablony stron
├── components/ # Współdzielone komponenty
├── styles/
│ └── main.css # Globalne style Tailwind v4
├── public/ # Wynik budowania
└── .cmssy/ # Wewnętrzny cache CLIKonfiguracja
Konfiguracja projektu (cmssy.config.js)
export default {
framework: "react",
projectName: "my-blocks",
author: {
name: "Twoje Imię",
email: "ty@example.com"
},
build: {
outDir: "public",
minify: true,
sourcemap: true
}
}Dane dostępowe API (.env)
Uruchom cmssy link aby skonfigurować interaktywnie, lub stwórz .env ręcznie:
CMSSY_API_URL=https://api.cmssy.io/graphql
CMSSY_API_TOKEN=cs_twoj_token_api
CMSSY_WORKSPACE_ID=twoje_id_workspace- Token API: Wygeneruj w Ustawienia Workspace → Tokeny API. Format:
cs_xxxxx - ID Workspace: Znajdziesz w Ustawienia Workspace → Ogólne → Informacje o Workspace
Struktura bloku
Każdy blok ma spójną strukturę:
blocks/moj-blok/
├── config.ts # Schemat + metadane (defineBlock)
├── package.json # Nazwa, wersja, opis
├── preview.json # Dane podglądu dla serwera dev
└── src/
├── Block.tsx # Twój komponent React
├── index.tsx # Eksportuje komponent + importuje CSS
├── index.css # Style (@import main.css + własne)
└── block.d.ts # Automatycznie generowane typy ze schematuconfig.ts — Definicja bloku
import { defineBlock } from "@cmssy/cli/config";
export default defineBlock({
name: "Sekcja Hero",
description: "Główna sekcja hero z nagłówkiem, CTA i mediami",
category: "marketing",
tags: ["hero", "landing", "cta"],
schema: {
heading: {
type: "singleLine",
label: "Nagłówek",
required: true,
defaultValue: "Witamy na naszej stronie"
},
description: {
type: "multiLine",
label: "Opis",
defaultValue: "Krótki opis"
},
buttonText: {
type: "singleLine",
label: "Tekst przycisku",
defaultValue: "Rozpocznij"
},
buttonUrl: {
type: "link",
label: "URL przycisku",
defaultValue: "#"
},
image: {
type: "media",
label: "Obraz Hero"
}
}
});Block.tsx — Komponent React
import type { PlatformContext } from "@cmssy/cli/config";
import type { BlockContent } from "./block";
export default function Hero({
content,
context
}: {
content: BlockContent;
context?: PlatformContext;
}) {
const {
heading = "Witaj",
description = "",
buttonText = "Rozpocznij",
buttonUrl = "#",
image
} = content;
return (
<section className="py-20 text-center">
<h1 className="text-5xl font-bold">{heading}</h1>
<p className="mt-4 text-lg text-muted-foreground">{description}</p>
<a href={buttonUrl} className="mt-8 inline-block px-6 py-3 bg-primary text-white rounded-lg">
{buttonText}
</a>
{image && <img src={image} alt="" className="mt-12 mx-auto rounded-xl" />}
</section>
);
}index.tsx — Wrapper eksportu
export { default } from "./Hero";
import "./index.css";Workflow deweloperski
Serwer deweloperski
cmssy devOtwiera się pod http://localhost:3000 z:
- Podglądem na żywo wszystkich bloków
- Hot reload przy zmianach plików
- Danymi podglądu z
preview.json
Budowanie
cmssy buildKompiluje wszystkie bloki za pomocą esbuild, przetwarza Tailwind CSS i generuje wynik do public/.
Publikowanie
cmssy publish-block hero -w <id-workspace>Wysyła blok przez pipeline sandbox build (CMS-576): CLI archiwizuje drzewo źródeł, backend buduje je w Vercel Sandbox i zapisuje artefakty z powrotem do Vercel Blob.
Opcje:
-w, --workspace <id>— nadpisuje workspace z.env--entry <ścieżka>— ścieżka entry bloku (domyślnie:src/index.tsx)--dry-run— zbiera pliki i wypisuje plan bez wysyłania
Stara komenda cmssy publish wraz z flagami --zip / --patch / --minor / --major / --overwrite-content została usunięta w CMS-606. Szablony nadal akceptują --overwrite-content przez cmssy publish-template.
Następne kroki
- Przewodnik tworzenia bloków — Schemat, typy pól, kontekst i zaawansowane wzorce
- Referencja komend CLI — Wszystkie komendy z opcjami