Sự khác biệt giữa babel-preset-giai đoạn-0, babel-preset-giai đoạn-1 vv?


126

Câu hỏi của tôi là: Sự khác nhau giữa là gì babel-preset-stage-0, babel-preset-stage-1, babel-preset-stage-2babel-preset-stage-3, và sự lựa chọn tốt nhất khi chúng tôi phát triển với những gì ES6?

Câu trả lời:


97

Các cài đặt trước giai đoạn của Babel tương đương với Quy trình TC39 và các trạng thái khác nhau của mỗi đề xuất thay đổi ngôn ngữ tiềm năng. Chúng bao gồm triển khai và polyfill cho tất cả các thay đổi được đề xuất trong giai đoạn đó.

Bất cứ điều gì hiện tại Stage-0là Strawman , không phải ES6. Đó là Javascript trong tương lai và hoàn toàn không chắc chắn rằng nó sẽ biến nó thành bất kỳ đặc tả ECMAScript chính thức nào.

Xin đừng chỉ thiết lập đểstage-0 nó sẽ hoạt động mà không hiểu hậu quả mà nó sẽ gây ra.

Babel Preset chỉ chứa các tính năng ES6 là preset-es2015


3
Thế còn stage-1? Có an toàn để sử dụng? Một số stage-1tính năng có thể bị phản đối và API-s thay đổi trong tương lai không?
notgiorgi

4
@notgiorgi An toàn hơn stage-0nhưng không có nghĩa là hoàn toàn an toàn trước sự thay đổi hoặc thậm chí là không dùng nữa (xem đề xuất của nhà xây dựng cuộc gọi đã được rút sau Giai đoạn 1). Nhưng điều tương tự có thể được nói về bất kỳ Giai đoạn nào khác ngoài Giai đoạn 4 (tức là Đã hoàn thành).
Mã hóa

Bạn có thể muốn thay thế preset-es2015bằng babel-preset-node6những ngày này, nếu chạy Node 6 hoặc tốt hơn.
Dave Sag

5
Hoặc tốt hơn nữa, babel-preset-envcó thể nhắm mục tiêu bất kỳ môi trường!
Mã hóa

5
Guyz Vui lòng sử dụng babel-preset-envINSTEAD OF babel-preset-es2015. babel-preset-es2015gần như đã lỗi thời
vijay

53

Như chủ yếu được xây dựng bởi các câu trả lời khác. Giai đoạn 4 ổn định nhất và Giai đoạn 0, nguy hiểm nhất. Dưới đây là một chút phân tích ở mức cao cho 5 giai đoạn từ các câu trả lời trước và tài liệu hướng dẫn. Tôi đang thêm điều này bởi vì khi tôi nói đến điều này, tôi đã mong đợi một sự phân chia cấp cao hơn về từng giai đoạn:


Giai đoạn 4: Hoàn thành

Sẵn sàng để đưa vào Tiêu chuẩn ECMAScript, đã vượt qua thử nghiệm và sẽ là một phần của phiên bản tiếp theo


Giai đoạn 3: Thí sinh

Bao gồm một văn bản đặc tả đầy đủ và bao gồm các plugin hầu hết đã được thử nghiệm và cung cấp phản hồi. Giải pháp đã hoàn tất và tất cả các thay đổi khác đều dựa trên kinh nghiệm thực hiện.


Giai đoạn 2: Dự thảo

Hỗ trợ thêm cho các plugin hoàn thành càng nhiều càng tốt. Các yêu cầu cho những điều này được đáp ứng chủ yếu chỉ với những thay đổi gia tăng trên đường đi. Ngữ nghĩa và api dự kiến ​​sẽ được hoàn thành. Nó rất có thể sẽ trở thành một phần của thông số kỹ thuật.


Giai đoạn 1: Đề xuất Một khái niệm đã được phát hiện và lựa chọn để kiểm tra ở giai đoạn này, chủ yếu là các bản đầy đủ và bản demo được mong đợi.


Giai đoạn 0: Strawman Cái tên này khiến tôi cười thầm theo TC-39, loại này không có bất kỳ loại ràng buộc nào nhưng với bối cảnh nó là danh mục cho các khái niệm chưa được chọn để theo dõi hoặc kiểm tra.

Mỗi cấp độ được bao gồm trong khi 4 bao gồm 3 bao gồm 2 và cứ thế ... Tôi hy vọng rằng tổng kết này sẽ giúp được ai đó trong tương lai.


15

Các giai đoạn đại diện cho các giai đoạn như được xác định bởi quy trình TC39 hoạt động các tính năng từ những ý tưởng điên rồ nhưng hữu ích thành các tiêu chuẩn được chấp nhận, chẳng hạn như ES6. Quá trình này mất một thời gian, vì mọi trường hợp góc phải được thảo luận, suy nghĩ, thử nghiệm, đa dạng, thảo luận thêm, v.v. Đó là, đó là một cơ quan tiêu chuẩn. Mục tiêu là nói "ES6" sẽ có nghĩa đầy đủ và hoàn chỉnh, giống như nói "ES5".

Trong thực tế, các yêu cầu dự án của bạn có thể bao gồm từ ở lại cho đến thử và đúng cho đến chơi xung quanh với các tính năng ngôn ngữ rất tiện lợi, nếu mơ hồ. Bạn có thể muốn bắt đầu với các liên kết sau:

  • Tổng quan về quy trình TC39 : Điều này bao gồm một biểu đồ tiện lợi về các giai đoạn có ý nghĩa gì và cách các tính năng tiến triển từ giai đoạn này sang giai đoạn khác. Dưới đây là tổng quan về TC39.

  • Các đề xuất hoạt động : Tổng quan nhanh về các đề xuất nhất định trong giai đoạn nào. Nó cũng bao gồm các liên kết đến các đề xuất Hoàn thành, Không hoạt động và Giai đoạn 0. Hôm nay, tháng 4 năm 2017, Trường lớp công khai ở giai đoạn 2, có nghĩa là nó được mô tả chính xác và người đánh giá đã được chỉ định, nhưng không được xem xét đầy đủ.

  • Gói cài sẵn Babel cho Giai đoạn 3 : Trang trình cắm, với các liên kết đến Git và NPM, cho tất cả các đề xuất của Giai đoạn 3. Về cơ bản, trình cắm thêm này kéo theo bộ sưu tập các gói, theo lý thuyết, hoàn thành các đề xuất hiện tại trong TC39 giai đoạn 3. Trong thực tế, có thể xảy ra lỗi. Ngoài ra, bạn có thể tìm thấy Tương tự tương tự, nó liên kết đến các trang bổ trợ cho Giai đoạn 2 trở xuống. Các trang đó sẽ liên kết đến các gói bao gồm cả đề xuất Giai đoạn 3 và các đề xuất kém ổn định hơn.

  • Babel Preset 'env' : Cài đặt sẵn Babel này hỗ trợ các đề xuất đã hoàn thành, chọn các gói chính xác cần thiết để hỗ trợ các tính năng này trong một môi trường đã biết. Ví dụ: một nodetệp thực thi cục bộ yêu cầu ít plugin hơn một trình duyệt cũ hơn. Có thể nghĩ đến plugin 'giai đoạn 4' hỗ trợ các tính năng được phê duyệt trong tương lai.

Tóm lại, bạn chỉ cần đối phó với các tính năng phát hành trước này nếu bạn sử dụng chúng. Nếu bạn cần sử dụng chúng, hãy chọn số lượng sân khấu cao nhất có những gì bạn cần. Nếu bạn chỉ muốn cài đặt đồ chơi với các tính năng điên rồ để thảo luận về máy làm mát nước, hãy tiếp tục và lấy giai đoạn 0.


cảm ơn, vì vậy babel-env là một loại cấu hình babel-recommanded
Webdess

4

Đây là điểm khởi đầu tốt nhất để hiểu. Cài đặt trước babel là gì

Một đoạn trích từ liên kết:

Giai đoạn 0 - Strawman: chỉ là một ý tưởng, có thể là plugin Babel.
Giai đoạn 1 - Đề xuất: điều này đáng để làm việc.
Giai đoạn 2 - Dự thảo: thông số ban đầu.
Giai đoạn 3 - Ứng viên: hoàn thành thông số kỹ thuật và triển khai trình duyệt ban đầu.
Giai đoạn 4 - Kết thúc: sẽ được thêm vào bản phát hành hàng năm tiếp theo

Ảnh tổng thể :

  1. Với thời gian Javascript đang phát triển và ngày càng có nhiều tính năng được thêm vào ngôn ngữ.
  2. Các trình duyệt cũng phải làm rất nhiều việc để họ có thể thực hiện các tính năng mới này để được họ hiểu. Quá trình này nói chung chậm hơn rất nhiều so với tốc độ phát triển của Javascript.
  3. Nhưng các nhà phát triển muốn sử dụng các tính năng mới của ngôn ngữ vì nó giúp họ dễ dàng viết, hiểu, duy trì mã hơn.
  4. Vì vậy, các nhà phát triển viết mã của họ bằng các tính năng Javascript mới, nhưng trước khi mã đó đến trình duyệt, nó sẽ trải qua quá trình xây dựng bằng cách sử dụng một số phép thuật, tất cả mã với các tính năng mới được trình duyệt mã hóa thành mã dễ hiểu. tức là các tính năng mới của Javascript nhưng được mã hóa bằng các cấu trúc ngôn ngữ có thể hiểu được của trình duyệt.
  5. Phép thuật xây dựng có thể được thực hiện bằng các công cụ, một trong số đó là Babel.
  6. Cách thức hoạt động của Babel là nó cần một bộ plugin. Mỗi plugin này có thể đề cập đến việc chuyển đổi một tính năng mới cụ thể của Javscript thành các cấu trúc ngôn ngữ có thể hiểu được của trình duyệt.
  7. Có hàng trăm plugin như vậy, mỗi plugin đề cập đến các tính năng mới khác nhau của Javascript. Các tính năng này có thể hoặc không phải là một phần của thông số Javascript cuối cùng. Và nếu nó không bao giờ kết thúc với thông số Javascript cuối cùng, thì không trình duyệt nào sẽ thực hiện tính năng này. Vì vậy, nếu bất kỳ nhà phát triển nào sử dụng bất kỳ tính năng thử nghiệm nào của JS bằng cách sử dụng plugin babel, thì nguy cơ mà anh ấy / cô ấy đang thực hiện. Nếu nó không bao giờ kết thúc trong spec, phần mã đó sẽ luôn phải được dịch mã trước khi nó được triển khai cho các trình duyệt.
  8. Rủi ro này được phân loại thành nhiều cấp độ khác nhau để biểu thị cơ hội của bất kỳ tính năng nào đạt đến thông số cuối cùng.
  9. Ngoài ra babel đã nhóm các plugin này thành nhiều bộ khác nhau, được gọi là presettheo thuật ngữ của babel. Và mỗi cài đặt trước chứa các plugin từ các mức độ rủi ro khác nhau.
  10. preset-0Điều đó có nghĩa là nó có các plugin cho các tính năng rất thử nghiệm và do đó có nguy cơ cao đưa nó ra thông số kỹ thuật cuối cùng. Nó giống như một ý tưởng đã đến với một nhà phát triển rằng Javascript nên có một tính năng cụ thể và anh ta đã thực hiện một số công việc để đưa nó vào quy trình đề xuất TC-39.
  11. preset-1 Nó chứa các plugin cho các ý tưởng tính năng được TC-39 chấp nhận và họ thấy nó đáng để làm việc.
  12. preset-2Plugin cho các tính năng trong đó bản nháp ban đầu đã sẵn sàng cho tính năng này. Và nó tiếp tục ..

Vì vậy, có thể một tính năng trong Giai đoạn 0 đã đạt đến Giai đoạn 2 trong một thời gian và cuối cùng sẽ được phát hành Javascript tiếp theo một thời gian nữa sau đó.

Do đó với mỗi phiên bản của các cài đặt sẵn Babel này, bạn có thể tìm thấy các bộ plugin khác nhau trong đó. Nó cũng có thể xảy ra rằng một tính năng trong giai đoạn 0 đã trải qua một số thay đổi và nó đã phá vỡ các thay đổi về cách thức hoạt động của nó. Và nó đã đạt được, giả sử giai đoạn 2 với một API hoàn toàn khác. Vì vậy, các nhà phát triển phải đảm bảo rằng khi họ cập nhật các plugin này, họ thực hiện các thay đổi cần thiết cho mã của họ.


3

Câu hỏi ban đầu là "Sự khác biệt giữa babel-preset-giai đoạn-0, babel-preset-giai đoạn-1, babel-preset-giai đoạn-2 và babel-preset-giai đoạn 3", thật kỳ lạ khi câu trả lời tập trung vào "sự khác biệt giữa TC39 giai đoạn-0, giai đoạn 1 .. thuật ngữ "được bình chọn, trong khi chỉ có một từ duy nhất (mặc dù không chính xác) bị bỏ phiếu. Để trích dẫn từ trang web babel:

Một cài đặt trước Babel là một danh sách các plugin có thể chia sẻ.

Các cài đặt trước Babel Giai đoạn chính thức đã theo dõi quá trình Phân đoạn TC39 cho các đề xuất cú pháp mới trong JavaScript.

Mỗi cài đặt trước (ví dụ: giai đoạn 3, giai đoạn 2, v.v.) bao gồm tất cả các plugin cho giai đoạn cụ thể đó và các plugin bên trên nó. Ví dụ, giai đoạn 2 bao gồm giai đoạn 3, v.v.

Ý tưởng cốt lõi là "những cái ở trên nó". Tôi không trả lời nửa sau vì câu trả lời ở trên rất tốt về phần đó.


-20

Tôi đã nhận nó. Các bạn có thể tham khảo https://babeljs.io/docs/plugins/preset-stage-0/

Nói một cách ngắn gọn, preset-stage-0chứa tất cả các chức năng preset-stage-1có và preset-stage-1chứa tất cả các chức năng preset-stage-2có và v.v.

Chữ số thấp hơn là mạnh mẽ hơn. Trong dự án của bạn, nếu bạn không lo lắng về vấn đề, chỉ cần đặt stage-0...


15
Nhưng bạn có hiểu những gì stage-0, vv thực sự là? Vì bạn nói "Chữ số thấp hơn mạnh hơn.", Tôi tin là không.
Felix Kling

2
Trên thực tế, tôi nhầm lẫn stagevới ES6, @RGraham đã chỉ ra rằng The Babel Preset which contains only ES6 features is preset-es2015. Cảm ơn!
Flyingzl

Nếu bạn muốn có vấn đề sau này, chỉ cần sử dụng giai đoạn-0! Một số hoặc tất cả các tính năng của giai đoạn 0 có thể không xuất hiện trong ES-spec. Vì vậy, hãy cẩn thận khi sử dụng các tính năng giai đoạn 0.
devsnd

Không chắc chắn tại sao câu trả lời này được bình chọn như vậy. Những gì anh ấy nói là chính xác. TC39 giai đoạn-0 về cơ bản là các đề xuất rất không đáng tin cậy. Họ có thể hoặc không thể đưa ra đề xuất cuối cùng. Nhưng babel-preset-stage-0bao gồm tất cả các plugin, từ stage-0đến stage-3. Điều đó có nghĩa là tôi muốn tất cả các tính năng được đề xuất, bất kể họ có thể đề xuất hay không.
Gaurav Kumar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.