Ketika membangun aplikasi web dengan AdonisJS 6, memahami struktur folder adalah langkah awal yang sangat penting. Struktur yang rapi dan konsisten akan memudahkan pengembangan, debugging, hingga scaling aplikasi. Artikel ini akan membahas secara mendalam struktur folder AdonisJS 6, fungsi tiap direktori, serta tips best practices agar proyekmu tetap terorganisir dan scalable.
Mengapa Struktur Folder Penting?
Struktur folder bukan sekadar “aturan main” framework, tapi fondasi yang menentukan workflow, maintainability, dan kemudahan kolaborasi tim. AdonisJS 6 mengadopsi pendekatan opinionated—struktur sudah disiapkan agar developer bisa langsung fokus ke fitur, bukan setup awal.
Gambaran Umum Struktur Proyek AdonisJS 6
Setelah menjalankan perintah inisialisasi:
npm init adonisjs@latest -- -K=web --db=mysql
Kamu akan mendapatkan struktur seperti berikut:
├── app
│ ├── controllers
│ ├── exceptions
│ ├── middleware
│ ├── models
│ ├── validators
├── config
│ ├── app.ts
│ ├── database.ts
│ ├── session.ts
│ └── ...
├── database
│ ├── migrations
│ ├── seeders
├── public
├── resources
│ ├── views
│ ├── js
│ ├── css
│ ├── fonts
│ ├── images
├── start
│ ├── env.ts
│ ├── kernel.ts
│ ├── routes.ts
│ ├── validator.ts
│ ├── events.ts
├── tests
│ ├── bootstrap.ts
│ ├── functional
│ ├── regression
│ ├── unit
├── types
│ ├── events.ts
│ ├── container.ts
├── providers
│ ├── app_provider.ts
│ ├── http_server_provider.ts
├── .env
├── package.json
├── tsconfig.json
Penjelasan Setiap Folder Utama
- app/: Tempat utama logic aplikasi. Berisi controller, model, middleware, validator, dan exception.
- config/: Semua file konfigurasi runtime, baik bawaan maupun package eksternal.
- database/: Menyimpan migration, seeder, dan (jika ada) factory untuk database.
- public/: Static files (gambar, CSS, JS) yang bisa diakses langsung oleh browser.
- resources/: Asset frontend (Edge views, JS, CSS, fonts, images, lang/translation).
- start/: File bootstrap aplikasi (env, kernel, routes, events, validator).
- tests/: Struktur testing (unit, functional, regression) dan bootstrap test.
- types/: Custom TypeScript types/interfaces untuk aplikasi.
- providers/: Service provider custom untuk modularisasi fitur.
Studi Kasus: Menambah Fitur Baru
Misal kamu ingin menambah fitur “Post”. Berikut best practice penempatan file:
- Controller:
app/controllers/posts_controller.ts
- Model:
app/models/post.ts
- Migration:
database/migrations/xxxx_create_posts_table.ts
- Seeder:
database/seeders/post_seeder.ts
- Validator:
app/validators/post_validator.ts
- Route:
start/routes.ts
- View:
resources/views/posts/index.edge
Dengan struktur ini, setiap fitur mudah dicari dan di-maintain.
Alias Import dan Modularisasi
AdonisJS 6 mendukung alias import di package.json
:
{
"imports": {
"#controllers/*": "./app/controllers/*.js",
"#models/*": "./app/models/*.js",
"#middleware/*": "./app/middleware/*.js",
"#validators/*": "./app/validators/*.js",
"#config/*": "./config/*.js"
}
}
Contoh import modular:
import Post from '#models/post'
import PostsController from '#controllers/posts_controller'
Best Practices Organisasi Proyek
- Ikuti struktur default: Hindari custom folder kecuali benar-benar perlu.
- Pisahkan domain logic: Satu folder untuk satu domain (misal: user, post, comment).
- Gunakan alias import: Memudahkan refactor dan menjaga konsistensi.
- Tempatkan konfigurasi di config/: Jangan hardcode di logic aplikasi.
- Testing terpisah: Semua test di folder
tests/
sesuai jenisnya. - Provider untuk fitur besar: Modularisasi dengan service provider jika fitur makin kompleks.
Tips Debugging dan Maintenance
- Gunakan path helper bawaan AdonisJS, misal
app.modelsPath('user.ts')
untuk resolve path model. - Cek file
.env
untuk environment variable, jangan commit data sensitif ke repo. - Manfaatkan
npm run lint
dannpm run format
untuk menjaga kualitas kode. - Dokumentasikan struktur custom di README jika ada perubahan besar.
Sumber Referensi dan Dokumentasi
Struktur folder yang baik adalah investasi jangka panjang untuk maintainability dan scaling aplikasi. Dengan mengikuti best practices AdonisJS 6, kamu akan lebih mudah berkolaborasi, debugging, dan menambah fitur baru tanpa takut “tersesat” di dalam kode. Yuk, cek kembali struktur proyekmu dan pastikan sudah optimal!