Cara Berkontribusi

React adalah salah satu proyek sumber terbuka pertama milik Facebook yang berada dalam pengembangan yang sangat aktif sekaligus digunakan untuk mengirimkan kode pada semua orang di facebook.com. Kami masih berusaha memperbaiki kekusutan yang ada untuk membuat proses kontribusi semudah dan setransparan mungkin, tapi kami belum sampai di sana. Semoga dokumen ini membuat proses berkontribusi menjadi jelas dan menjawab beberapa pertanyaan yang mungkin Anda miliki.

Kode Etik

Facebook telah mengadopsi Persetujuan Kontributor sebagai Kode Etiknya, dan kami berharap peserta proyek mengikutinya. Dimohon untuk membaca keseluruhannya agar Anda dapat memahami tindakan apa yang akan dan tidak akan ditoleransi.

Pengembangan Terbuka

Semua pengembangan pada React terjadi secara langsung pada GitHub. Baik anggota tim inti dan kontributor eksternal mengirimkan pull request yang akan melewati proses peninjauan yang sama.

Versi Semantik

React mengikuti versi semantik. Kami merilis versi patch untuk perbaikan bug kritikal, versi minor untuk fitur baru atau perubahan yang tidak esensial, dan versi mayor untuk perubahan yang merusak. Ketika kami membuat perubahan yang merusak, kami juga memperkenalkan peringatan deprecation pada versi minor sehingga pengguna kami mengetahui perubahan yang akan datang dan melakukan migrasi pada kode mereka terlebih dahilu. Pelajari lebih lanjut mengenai komitmen kami terhadap stabilitas dan migrasi inkremental di kebijakan versi kami.

Setiap perubahan signifikan didokumentasikan pada file changelog.

Pengaturan Cabang

Ajukan semua perubahan secara langsung pada cabang master. Kami tidak menggunakan cabang terpisah untuk pengembangan atau rilis yang akan datang. Kami mengupayakan yang terbaik untuk menjaga master dalam kondisi yang baik, dengan lulus semua tes yang ada.

Kode yang tiba di master harus kompatibel dengan rilis terakhir yang stabil. Kode tersebut boleh berisi fitur tambahan, tapi tidak boleh ada perubahan yang merusak. Kita harus bisa merilis versi minor yang baru dari master setiap saat.

Flag Fitur

Untuk menjaga cabang master pada keadaan dapat dirilis, perubahan yang merusak dan fitur eksperimental harus dipagari di balik flag fitur.

Flag fitur didefinisikan pada packages/shared/ReactFeatureFlags.js. Beberapa build dari React mungkin menmerapkan kumpulan flag fitur yang berbeda; misalnya, build React Native dikonfigurasi secara berbeda dari React DOM. Flag ini dapat ditemukan di packages/shared/forks. Flag fitur diberi tipe secara statis oleh Flow, sehingga Anda dapat menjalankan yarn flow untuk memastikan bahwa Anda telah membarui semua file yang dibutuhkan.

Sistem build React akan menanggalkan cabang fitur yang dinonaktifkan sebelum diterbitkan. Sebuah tugas integrasi berkelanjutan (continuous integration) berjalan pada setiap commit untuk memeriksa perubahan ukuran bundel. Anda dapat menggunakan perubahan pada ukuran sebagai tanda bahwa sebuah fitur telah dipagari dengan baik.

Bug

Mencari Isu yang Diketahui

Kami menggunakan GitHub Issues untuk bug publik. Kami sangat memperhatikan hal ini dan berusaha menjelaskan ketika kami sedang melakukan perbaikan secara internal. Sebelum mengajukan isu baru, coba pastikan bahwa masalahmu belum pernah ada sebelumnya.

Reporting New Issues

Cara terbaik untuk memperbaiki bug Anda adalah dengan menyediakan contoh kasus yang spesifik. Templat JSFiddle ini adalah titik mulai yang baik.

Bug Keamanan

Facebook memiliki program berhadiah untuk melaporkan bug keamanan secara rahasia. Dengan pertimbangan itu, dimohon untuk tidak mengajukan isu publik; harap melewati proses yang telah dijelaskan pada laman tersebut.

Bagaimana Cara Berhubungan

Terdapat pula komunitas aktif pengguna React pada platform komunikasi Discord jika Anda membutuhkan bantuan mengenai React.

Mengajukan Perubahan

Jika Anda berniat untuk mengubah API publik, atau mengajukan perubahan signifikan pada implementasinya, kami merekomendasikan Anda untuk mengajukan isu. Ini memungkinkan kami untuk mencapai kesepakatan pada proposal Anda sebelum Anda mengerahkan usaha yang signifikan pada hal tersebut.

Jika Anda hanya memperbaiki sebuah bug, tidak masalah untuk langsung mengirimkan pull request, tetapi kami masih merekomendasikan untuk mengajukan isu yang menjelaskan apa yang Anda perbaiki. Ini sangat membantu apabila kami tidak menerima perbaikan itu secara spesifik, tetapi tetap ingin untuk memantau isu tersebut.

Pull Request Pertama Anda

Sedang mengerjakan Pull Request pertama Anda? Anda dapat belajar bagaimana caranya dari seri video gratis ini:

Bagaimana Cara Berkontribusi pada Proyek Sumber Terbuka di GitHub

Untuk membantu Anda mengumpulkan pengalaman dan lebih familiar dengan proses kontribusi kami, kami memiliki daftar isu pertama yang baik berisi bug yang memiliki cakupan yang relatif terbatas. Ini adalah tempat yang baik untuk mulai.

Jika Anda memutuskan untuk memperbaiki sebuah isu, pastikan Anda memeriksa utas komentar apabila seseorang sudah sedang mengerjakan perbaikannya. Jika tidak ada yang sedang mengerjakannya pada saat itu, tinggalkan komentar yang menyatakan bahwa Anda bermaksud untuk memperbaikinya, sehingga orang lain tidak mengerjakan hal yang sama.

Jika seseorang mengambil sebuah isu, tetapi tidak dilanjutkan selama lebih dari 2 minggu, tidak apa-apa untuk mengambil alih isu tersebut, tapi Anda tetap sebaiknya meninggalkan komentar.

Mengirimkan Pull Request

Tim inti sedang memantau pull request. Kami akan meninjau pull request Anda dan antara melakukan merge, meminta perubahan, atau menutupnya dengan penjelasan. Untuk perubahan API kami mungkin perlu memperbaiki pemakaian kami secara internal di Facebook.com, sehingga mungkin mengakibatkan penundaan. Kami akan berusaha sebaik mungkin untuk memberikan informasi terbaru dan umpan balik selama berlangsungnya proses.

Sebelum mengajukan pull request, pastikan hal berikut telah diselesaikan:

  1. Fork repositori dan buat branch Anda dari master.
  2. Jalankan yarn pada induk repositori.
  3. Jika anda telah memperbaiki bug atau menambahkan kode yang perlu dites, tambahkan tes!
  4. Pastikan rangkaian tes berhasil (yarn test). Tip: yarn test --watch TestName sangat membantu dalam pengembangan.
  5. Jalankan yarn test-prod untuk mengetes pada lingkungan produksi. Ia mendukung opsi yang sama seperti yarn test.
  6. Jika anda membutuhkan debugger, jalankan yarn debug-test --watch TestName, buka chrome://inspect, dan tekan “Inspect”.
  7. Format kode Anda dengan prettier (yarn prettier).
  8. Pastikan kode Anda di-lint (yarn lint). Tip: yarn linc untuk mengecek hanya file yang berubah.
  9. Jalankan Flow untuk mengecek tipe (yarn flow).
  10. Jika belum, lengkapi CLA.

Perjanjian Lisensi Kontributor (CLA)

Agar dapat menyetujui pull request Anda, Anda perlu melengkapi CLA. Anda hanya perlu melakukan ini sekali, jadi apabila anda pernah melakukan hal ini untuk proyek sumber terbuka Facebook yang lain. Jika ini adalah pertama kalinya anda mengirimkan pull request, beritahu kamu bahwa Anda telah melengkapi CLA Anda, dan kami akan memeriksa kembali dengan nama pengguna GitHub anda.

Lengkapi CLA Anda di sini.

Prasyarat Kontribusi

  • Anda telah memasang Node pada v8.0.0+ dan Yarn](https://yarnpkg.com/en/) pada v1.2.0+.
  • Anda telah memasang gcc atau dapat memasang compiler jika dibutuhkan. Beberapa dependency dapat membutuhkan tahapan kompilasi. Pada OS X, Command Line Tools Xcode saja cukup. Pada Ubuntu, apt-get install build-essential akan memasang package yang dibutuhkan. Perintah sejenis seharusnya dapat bekerja pada distro Linux lainnya. Windows akan membutuhkan beberapa langkah tambahan, lihat instruksi pemasangan node-gyp untuk informasi lebih lengkap.
  • Anda familiar dengan Git.

Alur Kerja Pengembangan

Setelah melakukan kloning React, jalankan yarn untuk mengambil dependencies-nya. Kemudian, Anda dapat menjalankan beberapa perintah:

  • yarn lint memeriksa style kode.
  • yarn linc seperti yarn lint tetapi lebih cepat karena ia hanya memeriksa file yang berubah pada cabang Anda.
  • yarn test menjalankan seluruh rangkaian tes.
  • yarn test --watch menjalankan pemantau tes yang interaktif.
  • yarn test <pattern> menjalankan tes dengan nama file yang sama.
  • yarn test-prod menjalankan tes pada lingkungan produksi. Ia mendukung semua opsi yang sama seperti yarn test.
  • yarn debug-test sama seperti yarn test tetapi dengan debugger. Buka chrome://inspect dan tekan “Inspect”.
  • yarn flow menjalankan Flow untuk mengecek tipe.
  • yarn build membuat sebuah folder build dengan semua package.
  • yarn build react/index,react-dom/index --type=UMD membuat build UMD yang terdiri hanya dari React dan ReactDOM.

Kami merekomendasikan menjalankan yarn test (atau variasi lainnya di atas) untuk memastikan Anda tidak menyebabkan regresi apapun selama Anda mengerjakan perubahan. Namun akan bermanfaat untuk mencoba build React Anda pada proyek sesungguhnya.

Pertama jalankan yarn build. Perintah ini akan menghasilkan bundel-bundel yang telah dibuat di folder build, serta mempersiapkan package npm dalam build/packages.

Cara termudah untuk mencoba perubahan Anda adalah dengan menjalankan yarn build react/index,react-dom/index --type=UMD kemudian membuka fixtures/packaging/babel-standalone/dev.html. File ini telah menggunakan react.development.js dari folder build sehingga ia akan menangkap perubahan Anda.

Jika Anda ingin mencoba perubahan Anda pada proyek React yang sudah ada, Anda bisa menyalin build/dist/react.development.js, build/dist/react-dom.development.js, atau produk build lainnya ke dalam aplikasi Anda dan menggunakan mereka daripada versi stabilnya. Jika proyek Anda menggunakan React dari npm, Anda dapat menghapus react dan react-dom pada dependencies-nya dan menggunakan yarn link untuk mengarahkan mereka pada folder build lokal Anda:

cd ~/path_to_your_react_clone/build/node_modules/react
yarn link
cd ~/path_to_your_react_clone/build/node_modules/react-dom
yarn link
cd /path/to/your/project
yarn link react react-dom

Setiap kali Anda menjalankan yarn build pada folder React, versi terbaru akan muncul pada node_modules di proyek Anda. Anda dapat melakukan rebuild proyek untuk mencoba perubahan Anda.

Kami masih mengharuskan pull request Anda berisi unit test untuk setiap fungsionalitas baru. Dengan begitu, kami dapat memastikan bahwa kami tidak akan merusak kode Anda di kemudian hari.

Panduan Style

Kami menggunakan formatter kode otomatis Prettier. Jalankan yarn prettier setelah melakukan perubahan apapun pada kode.

Kemudian, linter kami akan menangkap sebagian besar isu yang mungkin ada pada kode Anda. Anda dapat memeriksa status dari style kode Anda secara mudah dengan menjalankan yarn linc.

Bagaimanapun, tetap ada beberapa style yang tidak dapat dideteksi oleh linter. Jika Anda ragu mengenai sesuatu, melihat Panduan Style Airbnb akan memandu Anda ke arah yang tepat.

Video Pengantar

Anda mungkin tertarik untuk menonton video singkat ini (26 menit) yang memberikan pengantar mengenai bagaimana cara berkontribusi pada React.

Video yang Penting:

  • 4:12 - Membangun dan mengetes React secara lokal
  • 6:07 - Membuat dan mengirimkan pull request
  • 8:25 - Mengorganisir kode
  • 14:43 - React npm registry
  • 19:15 - Menambahkan fitur baru pada React

Untuk gambaran realistik mengenai seperti apa rasanya berkontribusi pada React untuk pertama kalinya, cek acara ReactNYC yang menarik ini.

Meminta Komentar (RFC)

Banyak perubahan, termasuk perbaikan bug dan penyempurnaan dokumentasi dapat diimplementasi dan ditinjau melalui alur pull request GitHub pada umumnya.

Namum beberapa perubahan cukup “substansial”, dan kami meminta agar perubahan tersebut dimasukkan ke dalam proses desain dan menciptakan kesepakatan di antara tim inti React.

Proses RFC (Request for Comments) atau meminta komentar dimaksudkan untuk menyediakan jalur yang konsisten dan terkontrol untuk fitur baru yang akan masuk ke dalam proyek. Anda dapat berkontribusi dengan mengunjungi repositori rfcs.

Lisensi

Dengan berkontribusi pada React, Anda menyetujui bahwa kontribusi Anda akan dilisensikan di bawah lisensi MIT.

Selanjutnya Apa?

Bacalah bab berikutnya untuk mempelajari bagaimana basis kode ini diorganisir.