Apa perbedaan antara babel-preset-stage-0, babel-preset-stage-1 dll?

126

Pertanyaan saya adalah: Apa perbedaan antara babel-preset-stage-0, babel-preset-stage-1, babel-preset-stage-2dan babel-preset-stage-3, dan apa pilihan terbaik ketika kita mengembangkan dengan ES6?

flyingzl
sumber

Jawaban:

97

Prasetel panggung Babel menyamakan dengan Proses TC39 dan status yang berbeda dari setiap proposal untuk perubahan bahasa potensial. Mereka termasuk implementasi dan polyfill untuk semua perubahan yang diusulkan pada tahap itu.

Apa pun yang ada di saat ini Stage-0adalah Strawman, bukan ES6. Ini adalah Javascript masa depan dan sama sekali tidak yakin bahwa itu akan membuatnya menjadi spesifikasi ECMAScript resmi.

Tolong jangan hanya mengaturstage-0 agar itu akan bekerja tanpa memahami konsekuensi yang akan terjadi.

Babel Preset yang hanya berisi fitur ES6 adalah preset-es2015

CodingIntrigue
sumber
3
Bagaimana dengan stage-1? Apakah ini aman untuk digunakan? Bisakah beberapa stage-1fitur tidak digunakan lagi dan API-s akan berubah di masa mendatang?
notgiorgi
4
@ notgiorgi Lebih aman daripada stage-0tetapi sama sekali tidak sepenuhnya aman dari perubahan atau bahkan penghentian total (lihat proposal konstruktor Panggilan yang ditarik setelah Tahap 1). Tetapi hal yang sama dapat dikatakan tentang Tahap selain Tahap 4 (yaitu Selesai).
CodingIntrigue
Anda mungkin ingin mengganti preset-es2015dengan babel-preset-node6hari-hari ini, jika menjalankan Node 6 atau lebih baik.
Dave Sag
5
Atau lebih baik lagi, babel-preset-envyang dapat menargetkan lingkungan apa pun!
CodingIntrigue
5
Guyz Silakan gunakan babel-preset-envBUKAN DARI babel-preset-es2015. babel-preset-es2015hampir ketinggalan jaman
vijay
53

Seperti kebanyakan diuraikan oleh jawaban lain. Tahap 4 adalah yang paling Stabil dan Tahap 0, yang paling berbahaya. Berikut adalah sedikit gangguan pada tingkat tinggi untuk 5 tahap dari jawaban sebelumnya dan dokumentasi. Saya menambahkan ini karena ketika saya sampai pada hal ini saya mengharapkan pemecahan tingkat yang lebih tinggi dari setiap tahap:


Tahap 4: Selesai

Siap untuk dimasukkan dalam ECMAScript Standard, telah lulus pengujian dan akan menjadi bagian dari revisi berikutnya


Tahap 3: Kandidat

Termasuk teks spesifikasi lengkap dan termasuk plugin yang sebagian besar telah diuji dan diberikan umpan balik. Solusi selesai dan semua perubahan lebih lanjut didasarkan pada pengalaman implementasi.


Tahap 2: Konsep

Dukungan lebih lanjut untuk plugin selesai sebanyak mungkin. Persyaratan untuk ini sebagian besar dipenuhi dengan hanya perubahan bertahap di jalan. Semantik dan api diharapkan lengkap. Kemungkinan besar akan menjadi bagian dari spec.


Tahap 1: Proposal Konsep yang telah ditemukan dan dipilih untuk diperiksa pada fase ini sebagian besar poli-isi dan demo diharapkan.


Tahap 0: Strawman Nama ini membuat saya berdecak menurut TC-39 itu jenis tidak memiliki ikatan apa pun tetapi mengingat konteksnya itu adalah kategori untuk konsep yang belum dipilih untuk ditindaklanjuti atau diperiksa.

Setiap level inklusif sedangkan 4 termasuk 3 termasuk 2 dan seterusnya ... Saya berharap bahwa penjumlahan ini membantu seseorang di masa depan.

Callat
sumber
15

Tahapan mewakili tahapan sebagaimana didefinisikan oleh proses TC39 yang berfungsi fitur dari ide-ide gila tapi berguna menjadi standar yang diterima, seperti ES6. Prosesnya memakan waktu, karena setiap kasus sudut harus didiskusikan, dipikirkan, diuji, diisi lebih banyak, dibahas lebih banyak, dll. Artinya, ini adalah badan standar. Tujuannya adalah mengatakan "ES6" akan memiliki makna yang lengkap dan lengkap, seperti halnya yang dikatakan "ES5".

Dalam praktiknya, persyaratan proyek Anda dapat berkisar dari tinggal sampai yang dicoba dan benar untuk bermain-main dengan fitur bahasa yang sangat nyaman, jika samar-samar. Anda mungkin ingin memulai dengan tautan ini:

  • Gambaran Umum Proses TC39 : Ini mencakup bagan yang bagus tentang apa arti tahapan dan bagaimana kemajuan fitur dari tahap ke tahap. Di bawah ini adalah gambaran umum tentang TC39.

  • Proposal Aktif : Tinjauan singkat tentang tahap apa proposal tertentu. Ini juga termasuk tautan ke proposal Selesai, Tidak Aktif, dan Tahap 0. Hari ini, April 2017, Lapangan Kelas Publik berada di tahap 2, yang berarti dijelaskan dengan tepat dan pengulas telah ditugaskan, tetapi belum sepenuhnya ditinjau.

  • Paket Preset Babel untuk Tahap 3 : Halaman plug-in, dengan tautan ke Git dan NPM, untuk semua proposal Tahap 3. Pada dasarnya, plug-in ini menarik kumpulan paket yang, secara teori, mengisi proposal saat ini di TC39 tahap 3. Dalam praktiknya, bug dapat terjadi. Selain itu, Anda dapat menemukan hal serupa yang serupa, yang menghubungkan ke halaman plug-in untuk Tahap 2 dan di bawah. Halaman-halaman itu akan ditautkan ke paket yang mencakup proposal Tahap 3 dan proposal yang kurang stabil.

  • Babel Preset 'env' : Preset Babel ini mendukung proposal yang lengkap, memilih paket yang tepat yang diperlukan untuk mendukung fitur-fitur ini di lingkungan yang diketahui. Sebagai contoh, nodeexecutable lokal membutuhkan lebih sedikit plugin daripada browser yang lebih lama. Dapat dipikirkan plugin 'stage-4' yang mendukung fitur-fitur masa depan yang disetujui.

Singkatnya, Anda hanya perlu berurusan dengan fitur-fitur pra-rilis ini jika Anda menggunakannya. Jika Anda benar-benar perlu menggunakannya, pilih tahap tertinggi yang memiliki apa yang Anda butuhkan. Jika Anda hanya ingin instalasi mainan dengan fitur-fitur gila untuk didiskusikan di sekitar pendingin air, silakan dan ambil tahap 0.

Charles Merriam
sumber
terima kasih, jadi babel-env adalah semacam konfigurasi babel-recommanded
Webwoman
4

Ini adalah titik awal terbaik untuk dipahami. Apa itu babel preset

Kutipan dari tautan:

Tahap 0 - Strawman: hanya sebuah ide, kemungkinan plugin Babel.
Tahap 1 - Proposal: ini layak untuk dikerjakan.
Tahap 2 - Draft: spec awal.
Tahap 3 - Kandidat: spesifikasi lengkap dan implementasi browser awal.
Tahap 4 - Selesai: akan ditambahkan ke rilis tahunan berikutnya

Gambaran Keseluruhan :

  1. Seiring waktu Javascript berkembang dan semakin banyak fitur yang ditambahkan ke bahasa.
  2. Browser juga harus melakukan banyak pekerjaan agar mereka dapat mengimplementasikan fitur-fitur baru ini agar dapat dipahami oleh mereka. Proses ini secara umum jauh lebih lambat daripada kecepatan Javascript berkembang.
  3. Tetapi pengembang ingin menggunakan fitur-fitur bahasa baru karena memudahkan mereka untuk menulis, memahami, memelihara kode.
  4. Jadi pengembang menulis kode mereka menggunakan fitur Javascript baru, tetapi sebelum kode itu mencapai browser, ia melewati proses membangun di mana menggunakan beberapa sihir, semua kode dengan fitur baru ditransformasikan ke dalam kode yang dapat dimengerti oleh browser. yaitu fitur-fitur baru dari Javascript tetapi diberi kode menggunakan bahasa yang dimengerti oleh browser.
  5. Magic build dapat dilakukan menggunakan alat, salah satunya adalah Babel.
  6. Cara Babel bekerja adalah bahwa ia membutuhkan satu set plugin. Masing-masing plugin ini dapat merujuk untuk mengubah fitur baru Javscript menjadi bahasa yang dimengerti oleh browser.
  7. Ada ratusan plugin semacam itu, masing-masing merujuk pada fitur baru Javascript yang berbeda. Fitur-fitur ini mungkin atau mungkin tidak menjadi bagian dari spesifikasi Javascript akhir. Dan jika tidak pernah berakhir dengan spesifikasi Javascript final, tidak ada browser yang akan mengimplementasikan fitur ini. Jadi jika ada pengembang yang menggunakan fitur eksperimental JS menggunakan plugin babel, itu risiko yang dia ambil. Jika tidak pernah berakhir dalam spesifikasi, bagian kode itu harus selalu ditranslasikan sebelum digunakan untuk browser.
  8. Risiko ini dikategorikan ke dalam berbagai tingkatan untuk menandakan peluang fitur apa pun mencapai spesifikasi akhir.
  9. Juga babel telah mengelompokkan plugin ini ke dalam berbagai set, yang disebut a presetdalam istilah babel. Dan setiap preset berisi plugin dari berbagai tingkat risiko.
  10. preset-0Ini berarti memiliki plugin untuk fitur yang sangat eksperimental dan karenanya berisiko tinggi untuk mencapai spesifikasi akhir. Ini seperti ide yang datang ke pengembang bahwa Javascript harus memiliki fitur tertentu, dan dia melakukan beberapa pekerjaan untuk mendapatkannya ke proses proposal TC-39.
  11. preset-1 Ini berisi plugin untuk ide-ide fitur yang diterima oleh TC-39, dan mereka merasa itu layak untuk dikerjakan.
  12. preset-2Pengaya untuk fitur di mana konsep awal siap untuk fitur. Dan itu berlanjut ..

Jadi bisa saja suatu fitur di Tahap 0 mencapai Tahap 2 dalam beberapa waktu dan berakhir di rilis Javascript berikutnya beberapa waktu kemudian.

Karenanya dengan setiap versi Preset Babel ini, Anda dapat menemukan set plugin yang berbeda di dalamnya. Bisa juga terjadi bahwa fitur di tahap 0 mengalami beberapa perubahan dan membuat perubahan pada bagaimana fungsinya. Dan itu tercapai, katakanlah tahap-2 dengan API yang sama sekali berbeda. Jadi pengembang harus memastikan bahwa ketika mereka memperbarui plugin ini mereka membuat perubahan yang diperlukan untuk kode mereka.

Gaurav Kumar
sumber
3

Pertanyaan aslinya adalah "Apa perbedaan antara babel-preset-stage-0, babel-preset-stage-1, babel-preset-stage-2 dan babel-preset-stage-3", aneh bahwa jawaban berfokus pada "perbedaan antara TC39 tahap-0, tahap-1 .. terminologi "dapat dipilih, sedangkan satu-satunya yang relevan (meskipun tidak akurat) tidak dipilih. Mengutip dari situs babel:

Prasetel Babel adalah daftar plugin yang dapat dibagikan.

Preset Babel Stage resmi melacak proses Pementasan TC39 untuk proposal sintaksis baru dalam JavaScript.

Setiap preset (mis. Stage-3, stage-2, dll.) Termasuk semua plugin untuk tahap tertentu dan yang di atasnya. Misalnya, tahap-2 termasuk tahap-3, dan seterusnya.

Gagasan intinya adalah 'yang di atasnya'. Saya tidak menjawab bagian kedua karena jawaban di atas sangat bagus pada bagian itu.

Pu Guan
sumber
-20

Saya mengerti. Kalian bisa merujuk https://babeljs.io/docs/plugins/preset-stage-0/

Singkatnya, preset-stage-0berisi semua fungsi yang preset-stage-1dimiliki, dan preset-stage-1berisi semua fungsi yang preset-stage-2dimiliki dan seterusnya ...

Digit yang lebih rendah lebih kuat. Dalam proyek Anda, Jika Anda tidak ingin repot dengan masalah, hanya mengatur stage-0...

flyingzl
sumber
15
Tapi apakah Anda mengerti apa stage-0, dll sebenarnya? Karena Anda mengatakan "Digit lebih rendah lebih kuat.", Saya tidak percaya.
Felix Kling
2
Sebenarnya, saya bingung stagedengan ES6, @RGraham telah menunjukkan itu The Babel Preset which contains only ES6 features is preset-es2015. Terima kasih!
flyingzl
Jika Anda ingin memiliki masalah di lain waktu, gunakan saja tahap-0! Beberapa atau semua fitur stage-0 mungkin tidak membuatnya menjadi ES-spec sama sekali. Jadi berhati-hatilah dalam menggunakan fitur stage-0.
devsnd
Tidak yakin mengapa jawaban ini tidak dapat memilih. Apa yang dia katakan adalah benar. TC39 stage-0 pada dasarnya adalah proposal yang sangat tidak dipercaya. Mereka mungkin atau mungkin tidak membuat proposal akhir. Tetapi babel-preset-stage-0termasuk semua plugin, mulai dari stage-0hingga stage-3. Itu berarti saya ingin semua fitur yang diusulkan, tidak peduli apakah mereka dapat mengajukan proposal atau tidak.
Gaurav Kumar