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:
- Fork repositori dan buat branch Anda dari
master
. - Jalankan
yarn
pada induk repositori. - Jika Anda telah memperbaiki bug atau menambahkan kode yang perlu dites, tambahkan tes!
- Pastikan rangkaian tes berhasil (
yarn test
). Tip:yarn test --watch TestName
sangat membantu dalam pengembangan. - Jalankan
yarn test-prod
untuk mengetes pada lingkungan produksi. Ia mendukung opsi yang sama sepertiyarn test
. - Jika Anda membutuhkan debugger, jalankan
yarn debug-test --watch TestName
, bukachrome://inspect
, dan tekan “Inspect”. - Format kode Anda dengan prettier (
yarn prettier
). - Pastikan kode Anda di-lint (
yarn lint
). Tip:yarn linc
untuk mengecek hanya file yang berubah. - Jalankan Flow untuk mengecek tipe (
yarn flow
). - Jika belum, lengkapi CLA.
Perjanjian Lisensi Kontributor (CLA)
Anda perlu melengkapi CLA agar kami dapat menyetujui pull request Anda. Anda hanya perlu melakukan proses ini sekali. Jika Anda pernah melakukan hal ini untuk proyek sumber terbuka Facebook yang lain, Anda tidak perlu melakukannya lagi. Jika ini adalah pertama kalinya Anda mengirimkan pull request, beri tahu kami bahwa Anda telah melengkapi CLA Anda, dan kami akan memeriksa kembali dengan nama pengguna GitHub Anda.
Prasyarat Kontribusi
- Anda telah memasang Node pada v8.0.0+ dan Yarn](https://yarnpkg.com/en/) pada v1.2.0+.
- Anda telah memasang JDK.
- 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 pemasangannode-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
sepertiyarn 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 sepertiyarn test
.yarn debug-test
sama sepertiyarn test
tetapi dengan debugger. Bukachrome://inspect
dan tekan “Inspect”.yarn flow
menjalankan Flow untuk mengecek tipe.yarn build
membuat sebuah folderbuild
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/
yarn build react/index,react-dom/index,scheduler --type=NODE
cd build/node_modules/react
yarn link
cd 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.
Jika ada beberapa package yang masih hilang (mis. mungkin Anda menggunakan react-dom/server
di proyek Anda), Anda dapat melakukan full build dengan yarn build
. Perlu dicatat bahwa menjalankan yarn build
tanpa opsi akan memerlukan waktu yang lama.
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.
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.