Advertisement
  1. Code
  2. Blog

Bagaimana Menggunakan Modul Untuk Mengorganisasikan Kode Front-End

Scroll to top
Read Time: 4 min

Indonesian (Bahasa Indonesia) translation by Septian Ahmad Fujianto (you can also view the original English article)

Pernah terpikir bagaimana situs besar seperti Tuts+ menjaga kode CSS, HTML dan Javascript tetap teratur disetiap iterasi dan pengembangannya yang terus menerus? Saya akan tunjukkan proses yang digunakan untuk menjaganya tetap rapi dan teratur.

Masalah dengan CSS

Langkah pertama dalam proses ini adalah dengan menemukan suatu cara untuk membuat sebagian besar CSS yang dibutuhkan tidak menjadi berantakan.

Umumnya pada CSS, anda membuat style sesuai kebutuhan, kemudian berusaha membuat selector yang dapat diaplikasikan secara luas sehingga dapat digunakan kembali diseluruh situs. Sebagai contoh, berikut beberapa CSS rule sederhana yang tidak janggal keberadaanya pada tiap stylesheet.

1
h1 { font-size: 22px; }
2
.subtitle { font-size: 18px; }

Jika anda ingin meng-override selector tersebut pada bagian spesifik dari suatu halaman, anda bisa menggunakan aturan bertingkat untuk membuat selector mentargetkan elemen yang lebih spesifik:

1
.site-header h1 { font-size: 40px; }
2
.site-header .subtitle { font-size: 28px; }
3
.site-header a.navigation { color: #136FD2 }
4
...

Pendekatan ini tidaklah salah, Namun hal tersebut dapat menimbulkan masalah yang signifikan pada situs yang memiliki banyak halaman, dan dikerjakan oleh banyak pengembang.

Apa yang terjadi jika kita mengubah styling h1 atau .subtitle secara global? font-size sudah ter-override oleh style yang lebih spesifik, tapi jika kita menambahkan font-weight atauline-height itu akan terjadi. Segala perubahan yang dilakukan pada style global dapat mempengaruhi style spesifik dengan cara-cara yang sulit diprediksi bila tidak mengetahui pengetahuan mendalam mengenai style dari suatu situs.

Semakin banyak style yang dibuat seperti ini, akan semakin jelas "efek samping" pada interaksi style CSS nantinya, membutuhkan proses trial and error yang melelahkan untuk memperbaikinya, dan akhirnya menimbulkan kehilangan produktifitas dan banyak bug yang akan masuk ke fase produksi.

Modul BEM

Untuk mencegahnya, kami mengadopsi pendekatan ke CSS berbasis Metodologi BEM. Bukannya mendefenisikan style yang berlaku secara global, seluruh style disimpan pada "blok" serba ada melalui suatu konvensi penamaan. Sebuah "blok" didefenisikan lebih kurang sebagai sebuah unit konten mandiri yang dapat digunakan kembali (Meskipun tidak wajib untuk dapat digunakan kembali).

Sebagai contoh, perhatikan blok “featured-sections” berikut:

Tuts Featured Sections BlockTuts Featured Sections BlockTuts Featured Sections Block
Berdasarkan aturan konvensi nama, blok ini memiliki root elemen  div  dengan nama class featured-sections. Memiliki elemen dengan nama class seperti featured-sections__title dan featured-sections__section-link.

Kita menggunakan konvensi penamaan yang cocok dengan kode sumber, seperti semua style untuk blok featured-section akan disimpan di modules/featured_section.sass:

1
.featured-sections
2
  margin: 0 0 $gutter-width 0
3
  padding-top: 8px
4
  border-top: 4px solid #dae1e5
5
6
.featured-sections__title
7
  color: #8fa6b3
8
  font: bold 14px/1.2em $font

Konvensi penamaan seperti ini memastikan style tidak akan konflik dan berantakan. Selama konvensi penamaannya tetap diikuti, dengan nama blok diawal dari setiap nama class, mustahil suatu style untuk mempengaruhi sesuatu diluar dari bloknya.

Hal ini juga sangat memudahkan untuk mencari style yang sesuai dengan suatu elemen di basis kode. Dengan mudahnya anda bisa melihat nama class suatu elemen, dan mengetahui nama stylesheet yang harus dibuka.

Kode View Modular

Kita melangkah lebih lanjut dan menerapkan konvensi penamaan ini ke view. Tiap blok memiliki sebagian view dengan nama yang sama, disimpan dalam views/modules.  Sebagai contoh HTML view untuk featured-sections berada di views/modules/_featured_sections.html.slim:

Tuts featured-sections blockTuts featured-sections blockTuts featured-sections block
Seperti pada pemberian konvensi nama pada file CSS yang mempermudah menemukan style CSS , pemberian konvensi nama seperti ini untuk view mempermudah dalam menemukan kode view. Hal ini sangat berguna saat anda melihat halaman di  browser dan menemukan bagian tertentu yang ingin diubah.  Anda hanya perlu melakukan "Inspect Element" dan menggunakan blok nama yang terlihat jelas di class elemen CSS untuk membantu menuju ke file view yang relevan.

Modular JavaScript

Selanjutnya kita juga mengadopsi konvensi nama yang sama untuk kode Javascript, dengan menggunakan Backbone.js.

Tiap blok yang butuh untuk menjalakan suatu JavaScript behavior mendapatkan sebuah Backbone view object dengan nama blok yang sama:

1
class window.AccountHeader extends Backbone.View
2
  events:
3
'change .account-header__mobile-menu-select': 'mobileMenuChange'
4
5
  mobileMenuChange: ->
6
    document.location = @_selectedOption().data('url')
7
8
  _selectedOption: ->
9
    @$ 'option:selected'

Kita telah menulis beberapa kode pemuatan view yang dijalankan saat halaman dimuat, sehingga Backbone view yang sesuai secara otomatis dimuat untuk setiap elemen dengan class CSS yang cocok dengan daftar nama blok yang terkait dengan JS nya.

Kita juga menggunakan konvensi penamaan yang sama untuk kode JavaScript, menghasilkan suatu struktur untuk blok yang penuh fitur terlihat seperti ini:

Fully-featured block structureFully-featured block structureFully-featured block structure

Penerapan umum

Saya sangat merekomendasikan pendekatan ini untuk proyek apapun. Saya pikir ini sangat berguna untuk mengerjakan suatu proyek besar, bahkan jika anda bekerja untuk situs yang jauh lebih kecil, tidak ada ruginya mengatur kode front-end secara modular.

Walapun begitu, anda mungkin akan menghadapi masalah saat mencoba menggunakan strategi ini jika telah memiliki style global CSS  dengan jumlah yang signifikan, atau jika anda bergantung pada library CSS seperti Twitter Bootstrap.  Karena BEM style menggunakan nama class tunggal sebagi selector, BEM style memiliki nilai "kekhususan" CSS yang sangat rendah, dan cenderung untuk diabaikan oleh style CSS global yang sering memiliki beberapa tingkat selektor bertingkat, serta nama tag dan ID.

Tentu masih mungkin untuk berpindah dari style CSS global ke BEM style yang lebih modular, dan saya pikir itu akan sangat berguna untuk kedepannya. Namun, bersiagalah untuk sedikit kesulitan dalam membangun BEM style untuk beberapa saat, dan bersiaplah untuk terus menambahkan setidaknya sedikit deklarasi !important untuk sementara waktu pada CSS anda, sampai anda selesai mengubah seluruh style global yang tersisa.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.