export const packageManagers = ['yarn', 'pnpm', 'npm'];
// !languageexport const packageManagers = ['yarn', 'pnpm', 'npm'];
// !no-languageexport const packageManagers = ['yarn', 'pnpm', 'npm'];
Adnotările sunt micile marcaje autorizate care transformă un MDX simplu în conținut structurat pentru site. Ele definesc subpaginile proiectelor, slug-uri stabile, rezumate, fișiere puse în prim-plan și detalii de prezentare a codului, fără a muta aceste informații în codul rutelor.
Această pagină adună elementele de bază utile atât la scrierea manuală, cât și la solicitarea agenților să producă conținut. Fiecare secțiune arată mai întâi tiparul sursă, apoi explică ce face pagina redată cu el.
Adnotările de prezentare la nivel de bloc controlează cromatica implicită, indicatorii de linie, anteturile și controalele de suprapunere fără a necesita o componentă personalizată în fișierul MDX.
Blocurile de cod își arată limbajul curent ca etichetă, în mod implicit. Nu schimbă și nu modifică codul. Folosește !no-language pentru a o ascunde, sau !language pentru a o activa explicit.
export const packageManagers = ['yarn', 'pnpm', 'npm'];
// !languageexport const packageManagers = ['yarn', 'pnpm', 'npm'];
// !no-languageexport const packageManagers = ['yarn', 'pnpm', 'npm'];
Codul care nu este de tip shell afișează numerotarea liniilor în mod implicit. Blocurile de shell o omit, astfel încât comenzile scurte să rămână compacte, dar !line-numbers reactivează opțiunea pentru un exemplu individual de shell. Folosește !no-line-numbers pentru a dezactiva valoarea implicită pentru orice limbaj.
const managers = ['yarn','pnpm','npm',];
// !line-numbersconst managers = ['yarn','pnpm','npm',];
// !no-line-numbersconst managers = ['yarn','pnpm','npm',];
# !line-numbers# !no-shell-promptfunction website_build() {local project=${1:-website}if [[ $project == website ]]; thenyarn install --immutableyarn moon run "$project:build"elseprint "Unknown project: $project" >&2return 1fi}
Blocurile de shell arată un buton de copiere în mod implicit, în timp ce blocurile care nu sunt de tip shell păstrează butoanele de copiere opționale. Folosește !copy pentru a activa copierea, sau !no-copy pentru a o ascunde.
// !copyexport const packageManagers = ['yarn', 'pnpm', 'npm'];
Când !copy este prezent alături de eticheta limbajului, ambele împart aceeași bară de suprapunere.
Proiectul rulează prin sarcinile Yarn și Moon ale repository-ului. Blocurile de shell arată prefixul $ și un buton de copiere în mod implicit. Folosește !no-shell-prompt sau !no-copy atunci când un bloc de shell nu trebuie să arate unul dintre acestea, sau folosește !shell-prompt și !copy pentru a le adăuga la un alt limbaj de cod.
yarn moon run website:build
# !no-shell-promptyarn moon run website:build
# !no-copyyarn moon run website:build
# !no-copy# !no-shell-promptyarn moon run website:build
Metadatele simple ale unei fenced code block sunt redate ca nume de fișier deasupra blocului de cod.
```ts package-manager.tsexport const packageManagers = ['yarn', 'pnpm', 'npm'];```
Adnotările pot atrage atenția asupra unei părți specifice dintr-un exemplu sau pot ajusta prezentarea liniilor fără a schimba codul pe care cititorii îl pot copia.
!mark evidențiază linia următoare. Adaugă un interval sau o expresie regulată pentru a marca doar o parte a unei linii, și adaugă o culoare după selector pentru a suprascrie accentul temei.
function publish(version: string) {// !mark blueassertCleanWorkingTree();// !mark[/version/] goldreturn createRelease(version);}
!diff + și !diff - identifică liniile adăugate și eliminate. Stilizarea diferențelor reutilizează adnotarea de marcaj, astfel încât ambele funcționalități păstrează aceeași structură vizuală.
Folosește !noop înaintea unui marcator de adnotare pentru a arăta acel marcator ca și cod, în loc de a fi interpretat. Prefixul noop este omis din linia redată.
export function packageCommand(manager: string) {// !diff -return `${manager} install`;// !diff +return manager === 'npm' ? 'npm install' : `${manager} add`;}
!fold înlocuiește conținutul inline corespunzător cu o elipsă extensibilă. Elementul disclosure nativ păstrează textul integral în documentul redat pe server și rămâne extensibil fără JavaScript.
// !fold[/className="(.*?)"/gm]export function Status() {return <span className="status status--ready">Ready</span>;}
!word-wrap păstrează liniile lungi în interiorul lățimii disponibile și aliniază textul încadrat cu indentarea originală.
// !word-wrapconst command = createPackageManagerCommand({ manager: 'yarn', operation: 'exec', package: 'typescript', executable: 'tsc', arguments: ['--watch', '--preserveWatchOutput'] });
Unele tipare de autorizare necesită mai mult decât un singur element markdown. Aceste componente păstrează sursa MDX lizibilă, permițând în același timp paginii redate să grupeze exemple, controale sau comparații înrudite într-un singur bloc.
Blocurile de cod înrudite care descriu o singură schimbare în mai multe fișiere aparțin împreună, nu stivuite unul după altul.
<CodeWithTabs>```ts !!tabs component.tsxexport function Example() {return <p>Example</p>;}``````ts !!tabs component.css.tsexport const exampleStyle = style({display: 'block',});```</CodeWithTabs>
export function Example() {return <p>Example</p>;}
export const exampleStyle = style({display: 'block',});
Adnotarea !package descrie o comandă neutră față de managerul de pachete și redă formele corespunzătoare pentru Yarn, pnpm și npm ca file.
Instalarea pachetelor
yarn add typescript zod
pnpm add typescript zod
npm install typescript zod
```sh !package install typescript zod```
Fiecare variantă adaugă aceleași două pachete în proiectul curent și transmite numele lor neschimbate. Doar comanda diferă: Yarn și pnpm disting adăugarea unei dependințe de instalarea proiectului, folosind deci add, în timp ce npm suprasolicită install.
Inițierea unui proiect cu un pachet folosit o singură dată
yarn dlx create-vite my-app --template react-ts
pnpm dlx create-vite my-app --template react-ts
npx create-vite my-app --template react-ts
```sh !package exec create-vite my-app --template react-ts```
Aici binarul și pachetul au același nume, deci nu trebuie declarat niciun pachet. Numele proiectului și argumentele șablonului sunt identice peste tot, și doar executorul se schimbă: yarn dlx, pnpm dlx și npx.
Rularea unui binar dintr-un pachet numit
yarn dlx -p typescript tsc --watch
pnpm dlx --package typescript tsc --watch
npx --package typescript tsc --watch
```sh !package exec --package typescript tsc --watch```
Când binarul nu corespunde pachetului care îl furnizează, pachetul trebuie numit explicit. Executorii diferă la fel ca mai sus, la fel și opțiunea: Yarn o scrie -p, în timp ce pnpm și npm folosesc ambele --package.