Skip to content

Workflow Cleanup: package.json & Build Tasks

Gambaran Umum

Setelah semua block berhasil dimigrasi ke pendekatan modern (src/ folder), saatnya membersihkan package.json dan membuat build command yang rapi.

Langkah 1: Bersihkan Build Folder

Hapus seluruh folder build/ — jangan khawatir, kita selalu bisa membuatnya ulang dengan satu command:

❌ build/
   ├── archive copy/     ← folder sampah dari duplikasi
   ├── banner copy/      ← folder sampah
   └── ...

Langkah 2: Install npm-run-all

bash
npm install npm-run-all

Package ini memungkinkan kita menjalankan beberapa npm scripts secara berurutan (sequential) dari satu command.

Langkah 3: Update package.json Scripts

json
{
  "scripts": {
    "start": "wp-scripts start src/index.js",
    "blocks": "wp-scripts start --experimental-modules",
    "build": "run-s buildIndex buildBlocks",
    "buildIndex": "wp-scripts build src/index.js",
    "buildBlocks": "wp-scripts build --experimental-modules",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "devDependencies": {
    "@wordpress/scripts": "...",
    "npm-run-all": "..."
  }
}

Penjelasan Setiap Script

ScriptCommandFungsi
startwp-scripts start src/index.jsWatch mode untuk CSS/JS non-block (dari src/index.js)
blockswp-scripts start --experimental-modulesWatch mode untuk semua blocks (auto-detect block.json di src/)
buildrun-s buildIndex buildBlocksBuild sekali jalan (sequential): index dulu, lalu blocks
buildIndexwp-scripts build src/index.jsBuild satu kali untuk CSS/JS non-block
buildBlockswp-scripts build --experimental-modulesBuild satu kali untuk semua blocks

Perbedaan start vs blocks vs build

npm start       → Watch mode, HANYA src/index.js (CSS, JS umum, Sass)
npm run blocks  → Watch mode, OTOMATIS deteksi semua block.json di src/
npm run build   → Sekali jalan, build semua (index + blocks)

Langkah 4: Cara Penggunaan

Saat Development (Watch Mode)

Butuh dua terminal terpisah:

bash
# Terminal 1:
npm start

# Terminal 2:
npm run blocks

Catatan: Penulis sudah mencoba 10+ cara untuk menggabungkan kedua task ini jadi satu command (termasuk npm-run-all untuk watch mode), tapi belum menemukan solusi yang bekerja sempurna. Jadi untuk saat ini, dua terminal adalah pendekatan terbaik.

Saat Build untuk Production

Cukup satu command:

bash
npm run build

Ini akan:

  1. Build src/index.js (CSS/JS non-block)
  2. Build semua block folders (auto-detect block.json)
  3. Semua output masuk ke folder build/

Langkah 5: Verifikasi Build Folder

Setelah npm run build, folder build/ harus berisi:

build/
├── index.js          ← dari src/index.js
├── index.css         ← compiled CSS
├── style-index.css   ← style
├── footer/           ← block: footer
│   ├── block.json
│   ├── index.js
│   └── render.php
├── header/           ← block: header
│   ├── block.json
│   ├── index.js
│   └── render.php
├── banner/           ← block: banner
│   ├── block.json
│   ├── index.js
│   └── render.php
├── slide/
├── slideshow/
├── genericheading/
├── genericbutton/
├── eventsandblogs/
├── search/
└── (block lainnya)/

Apa yang Bisa Dihapus

Setelah semua migrasi selesai:

✗ Hapus folder our-blocks/ (semua block sudah di src/)
✗ Hapus class PlaceholderBlock dari functions.php
✗ Hapus class JSXBlock dari functions.php
✗ Hapus script "devfast" dari package.json (jika ada, dari era lama)
✗ Hapus entry point manual di script "start" (banner, heading, dll)

Ringkasan Chapter 28

KonsepKeterangan
block.jsonSemua metadata block: name, title, attributes, supports, file references
render.phpFile PHP terpisah untuk server-side rendering (opsional)
edit.jsKomponen React untuk pengalaman editor
index.jsRegistrasi block + save function
useBlockPropsWrapper div wajib untuk API Version 3
register_block_type_from_metadata()Satu baris PHP untuk mendaftarkan block
wp_localize_scriptMenyediakan data PHP (theme path) ke JavaScript
@wordpress/scripts auto-detectionOtomatis mendeteksi block.json di subfolder src/
npm-run-all + run-sMenjalankan build tasks secara sequential

Alur Kerja Modern (Final)

Development:
  Terminal 1: npm start          (watch CSS/JS umum)
  Terminal 2: npm run blocks     (watch block files)

Production Build:
  npm run build                  (build semua sekaligus)

Mendaftarkan Block:
  functions.php → register_block_type_from_metadata(__DIR__ . "/build/nama-block")

Menambah Block Baru:
  1. Buat folder src/nama-block/
  2. Buat block.json, index.js, edit.js, [render.php]
  3. Tambah register_block_type_from_metadata() di functions.php
  4. Selesai! ✅

Tools 100% Resmi WordPress — tidak ada boilerplate custom!