Cara Migrasi dari Contentful ke EmDash CMS

Layak dinyatakan dengan jelas sejak awal: berbeda dengan WordPress, EmDash saat ini belum mengirimkan wizard import Contentful bawaan yang terbimbing — sumber import yang terdokumentasi khusus-WordPress (file WXR, OAuth WordPress.com, dan probe REST API WordPress). Migrasi dari Contentful adalah proses yang di-script memakai REST API dan CLI EmDash sendiri, bukan wizard sekali-klik. Ini menelusuri jalur nyata dan bekerja itu.
Daftar Isi
- Langkah 1: Ekspor Space Contentful-mu
- Langkah 2: Petakan Content Type Contentful ke Collection EmDash
- Langkah 3: Tangani Aset
- Langkah 4: Konversi Rich Text ke Portable Text
- Langkah 5: Script Import lewat CLI atau REST API
- Langkah 6: Buat Import Source Kustom buat Migrasi Berulang
- Pertanyaan yang Sering Diajukan
- Sungguh-sungguh tidak ada migrasi Contentful sekali-klik?
- Apa bagian tersulit dari migrasi ini dalam praktiknya?
- Bisakah saya tetap menjalankan Contentful selama migrasi?
- Haruskah saya migrasi semuanya sekaligus atau dalam batch?
- Kesimpulan
Langkah 1: Ekspor Space Contentful-mu
Contentful mempublikasikan tool ekspor resminya sendiri persis buat tujuan ini. Instal dan jalankan terhadap space-mu:
npm install -g contentful-export
contentful-export --space-id YOUR_SPACE_ID --management-token YOUR_TOKEN --export-dir ./contentful-exportIni menghasilkan file JSON yang berisi content type, entry, aset, dan locale-mu — bentuk penuh space Contentful-mu, terstruktur dan siap dipetakan ke schema EmDash.
Langkah 2: Petakan Content Type Contentful ke Collection EmDash
Field content-type Contentful terpetakan dengan cukup bersih ke 16 tipe field EmDash. Pemetaannya sebagian besar satu-ke-satu, dengan rich text dan reference butuh perhatian paling banyak:
- Contentful Text / Symbol → EmDash string atau text
- Contentful Rich Text → EmDash portableText (konversi struktural dibutuhkan, lihat Langkah 4)
- Contentful Number / Integer → EmDash number atau integer
- Contentful Boolean → EmDash boolean
- Contentful Date → EmDash datetime
- Contentful Media (tunggal) → EmDash image atau file
- Contentful Reference (tunggal) → EmDash reference
- Contentful Reference (banyak) / Array → EmDash reference dengan allowMultiple, atau repeater
Buat collection dan field yang cocok di Visual Schema Builder EmDash (admin panel, tanpa kode dibutuhkan buat schema itu sendiri), atau script langsung dengan perintah schema CLI kalau kamu memetakan banyak content type dan ingin itu bisa direproduksi.
Langkah 3: Tangani Aset
URL aset yang diekspor Contentful mengarah ke CDN Contentful sendiri. Unduh setiap aset dari URL yang diekspornya dan unggah ke media library EmDash lewat admin UI — media library EmDash mendukung upload drag-and-drop dengan dukungan signed URL, dan begitu diunggah, setiap aset mendapat ID media EmDash yang akan kamu referensikan saat membuat entry di Langkah 5.
Langkah 4: Konversi Rich Text ke Portable Text
Ini langkah tanpa jalan pintas. Field Rich Text Contentful juga format terstruktur berbasis-block — secara konseptual dekat dengan Portable Text, tapi spec yang berbeda dengan nama tipe dan struktur berbeda. Transform JSON field-demi-field langsung (memetakan tipe node Contentful seperti `paragraph`, `heading-1`, `unordered-list`, dan `hyperlink` ke varian style `block` dan definisi mark EmDash) adalah pendekatan praktisnya. Buat sedikit entry, ini bisa dilakukan manual; buat library konten yang besar, tulis script konversi kecil yang menjelajahi tree dokumen Rich Text Contentful dan menghasilkan bentuk block Portable Text EmDash.
Portable Text adalah spesifikasi buat rich text terstruktur. Nilainya disimpan sebagai array JSON dari block Portable Text — setiap block punya _type, style, dan array children dari span typed.
Langkah 5: Script Import lewat CLI atau REST API
Dengan content type terpetakan dan aset terunggah, buat entry secara programatik. Perintah content CLI EmDash bekerja baik buat migrasi yang di-script:
npx emdash content create posts --file entry-001.json --slug my-first-post
# Or pipe data directly:
cat entry-001.json | npx emdash content create posts --stdinBuat migrasi yang lebih besar, REST API lebih praktis buat dijalankan dari script yang meloop di atas entry Contentful yang kamu ekspor:
POST /_emdash/api/content/posts
Content-Type: application/json
Authorization: Bearer YOUR_API_TOKEN
{
"title": "My First Post",
"slug": "my-first-post",
"content": [ /* converted Portable Text blocks */ ],
"status": "draft"
}Item dibuat sebagai draft secara default kecuali kamu secara eksplisit set `status: "published"` — jaring pengaman yang disengaja, membiarkanmu meninjau konten yang dikonversi di admin EmDash sebelum apa pun live, terutama berguna mengingat konversi Rich Text di Langkah 4 adalah bagian yang paling mungkin butuh sentuhan manual.
Langkah 6: Buat Import Source Kustom buat Migrasi Berulang
Kalau kamu melakukan migrasi ini berulang kali — agensi yang memigrasikan beberapa klien dari Contentful, misalnya — EmDash mengekspos interface `ImportSource` yang terdokumentasi (`probe`, `analyze`, `fetchContent`) yang bisa kamu implementasikan dan daftarkan di integrasinya, memberi Contentful pengalaman wizard-terbimbing yang sama seperti yang dimiliki WordPress hari ini, bisa dipakai ulang di setiap migrasi masa depan alih-alih script sekali-pakai.
// astro.config.mjs
import { contentfulSource } from "./src/import/contentful-source";
export default defineConfig({
integrations: [
emdash({
import: { sources: [contentfulSource] },
}),
],
});Pertanyaan yang Sering Diajukan
Sungguh-sungguh tidak ada migrasi Contentful sekali-klik?
Belum hari ini — sumber import bawaan dan wizard-terbimbing EmDash khusus-WordPress. Migrasi Contentful adalah proses nyata dan bekerja memakai tools yang terdokumentasi (REST API EmDash, CLI, dan interface Custom Sources), cuma bukan satu alur terbimbing tunggal seperti import WordPress.
Apa bagian tersulit dari migrasi ini dalam praktiknya?
Mengonversi field Rich Text Contentful ke Portable Text — keduanya berbasis-block dan secara struktural serupa, tapi bentuk JSON sesungguhnya cukup berbeda sehingga copy-paste naif tidak akan bekerja. Anggarkan waktu nyata buat langkah ini secara khusus, terutama buat konten dengan entry embedded yang kompleks atau formatting inline yang berat.
Bisakah saya tetap menjalankan Contentful selama migrasi?
Ya — langkah ekspor read-only terhadap space Contentful-mu, jadi tidak ada alasan buat mematikannya sementara kamu membangun dan menguji script migrasi terhadap EmDash.
Haruskah saya migrasi semuanya sekaligus atau dalam batch?
Buat apa pun di luar library konten kecil, batch berdasarkan content type dan verifikasi setiap batch di admin EmDash sebelum lanjut ke berikutnya — itu mengisolasi bug konversi Rich Text ke satu batch alih-alih menemukannya setelah mengimpor semuanya.
Kesimpulan
Migrasi dari Contentful ke EmDash hari ini adalah proses nyata yang di-script — tool ekspor Contentful sendiri, langkah pemetaan tipe-field, konversi Rich-Text-ke-Portable-Text, dan panggilan CLI atau REST API buat membuat entry — bukan wizard terbimbing seperti migrasi WordPress. Buat tim yang melakukan ini berulang kali, membangun `ImportSource` yang tepat mengubah script sekali-pakai itu jadi alur terbimbing yang bisa dipakai ulang. Lihat panduan setup EmDash 10-menit kami buat menjalankan proyek sebelum kamu mulai memetakan content type.








Komentar