İçindekiler
Başlarken
Bir Carats projesi kurmayı ve sunucu tarafında işlenen bir uygulamayı çalıştırmayı öğrenin.
Gereksinimler
Carats, paket yönetimi ve geliştirme sunucusunu çalıştırmak için Bun kullanır. Bun TSX'i anında derlediği için geliştirme sırasında ayrı bir derleme adımı yoktur. Node.js 20+ da üretim derlemeleri için çalışır, ancak desteklenen yol Bun'dur.
Hızlı başlangıç
Başlamanın en hızlı yolu resmî proje oluşturucusudur. Facet'ler, culet'ler, paylaşılan bir layout, SASS tasarım token'ları ve testler içeren eksiksiz çalışan bir Carats uygulaması yazar; böylece bu belgelerde anlatılan her özellik zaten bağlıdır ve çalışan kod olarak okunabilir.
Yeni bir proje oluştur
bun create carats my-carats-app
cd my-carats-app
`bun create carats`, yayımlanmış `create-carats` paketini çözer ve `create-carats` binary'sini çalıştırır; bu da adını verdiğiniz dizine eksiksiz bir Carats projesi yazar. Dizin adı vermezseniz mevcut dizine iskelet oluşturur.
Bağımlılıkları kur ve geliştirme sunucusunu başlat
bun install
bun run dev
Sunucu `http://localhost:5173` adresini dinler. Oluşturulan proje bir panel, bir pazar, bir portföy, bir işlem sayfası, paylaşılan bir layout, bir bulunamadı sayfası ve bir hata sayfası ile gelir; böylece bu belgelerde anlatılan her özellik zaten bağlıdır ve çalışan kod olarak okunabilir.
Manuel kurulum
Boş bir projeyle başlamayı tercih ederseniz aşağıdaki klasör yapısını oluşturup bağımlılıkları kendiniz kurun.
Klasör yapısı
Aşağıdaki klasörleri ve dosyaları oluşturun. Konumlar sabittir, çünkü framework bunları geleneksel yollarla çözer.
src/
├── app.ts
├── vite-env.d.ts
├── dto/
│ ├── user.d.ts
│ └── trade-data.d.ts
├── client/
│ ├── index.html
│ ├── entrypoint.ts
│ ├── facets.tsx
│ ├── base.sass
│ ├── components/
│ │ ├── SearchInput.tsx
│ │ └── search-bar.sass
│ └── pages/
│ ├── _layout/index.tsx
│ ├── _error/index.tsx
│ ├── _not_found/index.tsx
│ ├── home/index.tsx
│ ├── market/index.tsx
│ ├── profile/index.tsx
│ └── trade/index.tsx
└── server/
├── entrypoint.ts
└── culets.ts
public/
vite.config.client.ts
vite.config.server.ts
vitest.config.ts
tsconfig.json
package.json
Bağımlılıkları kur
Carats küçük paketlere ayrılmıştır. Aşağıdaki çalışma zamanı bağımlılıkları tam yığın bir uygulamanın kullandıklarıdır; geliştirme bağımlılıkları ise JJSX derlemesi, SASS ve tip denetimi için gereklidir.
Çalışma zamanı bağımlılıkları
bun add @carats/core @carats/render @carats/hooks @carats/csr
bun add @carats/ssr @carats/express @carats/ssg
bun add express compression sirv
Geliştirme bağımlılıkları
bun add -d jjsx vite sass typescript
bun add -d @types/node @types/express @types/compression
bun add -d vitest @vitest/coverage-v8 @fetch-mock/vitest cross-env
`@carats/express`, Express 5 gerektirir; bu yüzden ana sürüm seçeneğe bırakılmaz.
Yapılandırma
TypeScript yapılandırması
Carats, projenin kökünde bir tsconfig.json dosyası gerektirir. types, jsx, jsxFactory ve jsxFragmentFactory seçenekleri TypeScript'e JJSX'i öğretir; typeRoots ise src/dto içindeki global DTO arayüzlerinin çözülebilmesini sağlar.
{
"compilerOptions": {
"target": "es2022",
"useDefineForClassFields": true,
"module": "esnext",
"lib": ["ES2022", "DOM", "DOM.Iterable"],
"types": ["jjsx"],
"typeRoots": ["./src/dto", "./node_modules"],
"skipLibCheck": true,
"jsx": "react",
"jsxFactory": "JJSX.jsxFactory",
"jsxFragmentFactory": "JJSX.fragmentFactory",
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"isolatedModules": true,
"moduleDetection": "force",
"noEmit": true,
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true
},
"include": ["src"]
}
`typeRoots` iki işi birden yapar. Global DTO arayüzlerinin bildirim dosyası olarak alınması için `src/dto` klasörünü gösterir ve `types: ["jjsx"]` ifadesinin çözülmesi için `./node_modules` dizinini arama yolunda tutar, çünkü `jjsx` `@types` altında bulunmaz.
İstemci Vite yapılandırması
HTTP dinleyicisini Express sunucusu sahiplendiği için istemci derlemesi middleware modunda çalışır. appType: 'custom', HTML'i Carats kendisi işlediğinden Vite'in kendi HTML geri düşmesini devre dışı bırakır.
import { defineConfig } from 'vite'
import path from 'path'
export default defineConfig({
publicDir: path.resolve(import.meta.dirname, 'public'),
root: path.resolve(import.meta.dirname, 'src/client'),
base: '/',
appType: 'custom',
server: {
middlewareMode: true
},
build: {
outDir: path.resolve(import.meta.dirname, 'dist/client'),
emptyOutDir: true,
manifest: true,
minify: true,
rollupOptions: {
treeshake: true
}
}
})
Sunucu Vite yapılandırması
import { defineConfig } from 'vite'
import path from 'path'
export default defineConfig({
publicDir: false,
build: {
ssr: path.resolve(__dirname, 'src/server/entrypoint.ts'),
outDir: path.resolve(__dirname, 'dist/server'),
emptyOutDir: true,
minify: true,
rollupOptions: {
treeshake: true
}
}
})
Package.json betikleri
Bu betikler bir Carats uygulamasını geliştirmek, derlemek ve önizlemek için desteklenen giriş noktalarıdır.
{
"scripts": {
"dev": "bun --inspect=6499 src/app.ts",
"build": "bun build:server && bun build:client",
"build:client": "vite build --config vite.config.client.ts",
"build:server": "vite build --config vite.config.server.ts",
"build:static": "cross-env NODE_ENV=production carats-ssg",
"preview": "cross-env NODE_ENV=production bun src/app.ts",
"test": "vitest --run --coverage"
}
}
Ana uygulama dosyası `src/app.ts` konumunda bulunmalıdır.
Uygulamayı çalıştırma
bun run dev uygulamayı 6499 portunda Bun inspector ile başlatır. bun run build sunucuyu ve istemciyi paketler, bun run preview üretim derlemesini sunar. bun run build:static uygulamayı statik HTML'e önceden işler.
Proje yapısı
Tipik bir Carats projesi şu yapıya sahiptir:
| Yol | Açıklama |
|---|---|
src/app.ts | Ana uygulama giriş noktası. Carats middleware'ini Express üzerine bağlar ve HTTP sunucusunu başlatır. |
src/vite-env.d.ts | Vite istemci tip referansı. src/vite-env.d.ts konumundadır, src/client içinde değil. |
src/client/index.html | Sunucunun işlediği HTML şablonu. <!--app-head--> ve <div id="app"><!--app-html--></div> yer tutucularını içermelidir. |
src/client/entrypoint.ts | İstemci giriş noktası. Facet'leri tarayıcıya bağlar ve istemci tarafı işlemeyi başlatır. |
src/client/facets.tsx | Rota tanımları; istemci ve sunucu giriş noktası tarafından paylaşılır. |
src/client/base.sass | Tasarım token'larını ve temel sıfırlamaları içeren global stil dosyası. |
src/client/pages/ | Sayfa bileşenleri. Her alt klasör index.tsx dosyasından varsayılan bir bileşen dışa aktarır ve kendi SASS dosyasını içe aktarabilir. |
src/client/components/ | Sayfaların kullandığı paylaşılan bileşenler. |
src/server/entrypoint.ts | SSR için sunucu giriş noktası. defineServerEntry(facets) dışa aktarır ve culet'leri oturtur. |
src/server/culets.ts | Culet'ler; burnished bileşenlerin kullandığı sunucu tarafı veri fonksiyonları. |
src/dto/ | Global TypeScript arayüzleri. typeRoots üzerinden dahil edilir, böylece culet |
public/ | Site kökünden sunulan statik varlıklar. |
Sonraki adımlar
JJSX'in, facet'lerin, culet'lerin ve sunucu prop'larının bir araya nasıl geldiğini anlamak için Temel Kavramlar sayfasını okuyun, ardından Bileşenler ve Sunucu Tarafı İşleme sayfalarına bakın.