babel-preset-stage-0, babel-preset-stage-1 등의 차이점은 무엇입니까?


126

내 질문은 : 차이 무엇인가 babel-preset-stage-0, babel-preset-stage-1, babel-preset-stage-2babel-preset-stage-3,와 우리가 개발 최선의 선택은 무엇을 ES6?

답변:


97

Babel의 단계 사전 설정은 TC39 프로세스 및 잠재적 언어 변경에 대한 각 제안의 다른 상태와 동일합니다 . 여기에는 해당 단계에서 제안 된 모든 변경 사항에 대한 구현 및 폴리 필이 포함됩니다.

현재 ES6이 아닌Stage-0 Strawman이 있습니다. 미래의 Javascript이며 공식 ECMAScript 사양으로 만들지 확실하지 않습니다.

이 결과를 이해하지 않고 작동하도록 설정stage-0 하지 마십시오 .

ES6 기능 만 포함 된 Babel Preset은 preset-es2015


3
무엇에 대해 stage-1? 사용하는 것이 안전합니까? stage-1향후 일부 기능은 더 이상 사용되지 않고 API가 변경 될 수 있습니까?
notgiorgi

4
@notgiorgi 보다 안전stage-0 하지만 결코 변경이나 전체적인 지원 중단으로부터 완전히 안전하지는 않습니다 ( 1 단계 이후에 철회 된 호출 생성자 제안 참조 ). 그러나 4 단계 이외의 모든 단계 (즉, 완료)에 대해서도 마찬가지입니다.
CodingIntrigue

다음을 교체 할 수 있습니다 preset-es2015와 함께 babel-preset-node6더 나은 노드 6 이상을 실행하는 경우, 요즘.
Dave Sag

5
또는 더 나은 아직 babel-preset-env어떤 환경을 대상으로 할 수 있습니다!
CodingIntrigue

5
Guyz babel-preset-envINSTEAD OF를 사용하십시오 babel-preset-es2015. babel-preset-es2015거의 구식입니다
vijay

53

대부분 다른 답변으로 정교합니다. 4 단계가 가장 안정적이며 0 단계가 가장 위험합니다. 다음은 이전 답변과 설명서의 5 단계에 대한 간략한 설명입니다. 나는 이것에 왔을 때 각 단계가 무엇인지에 대한 더 높은 수준의 분석을 기대했기 때문에 이것을 추가하고 있습니다.


4 단계 : 완료

ECMAScript Standard에 포함 준비 완료, 테스트 통과 및 다음 개정의 일부


3 단계 : 후보

전체 사양 텍스트를 포함하고 대부분 테스트 및 피드백과 함께 제공되는 플러그인을 포함합니다. 솔루션이 완성되었으며 모든 추가 변경 사항은 구현 경험을 기반으로합니다.


2 단계 : 초안

플러그인에 대한 추가 지원이 가능한 많이 완료되었습니다. 이에 대한 요구 사항은 대부분 점차적으로 변경 사항 만 충족합니다. 의미 및 API가 완료 될 것으로 예상됩니다. 아마도 사양의 일부가 될 것입니다.


1 단계 : 제안 이 단계에서 발견되고 검토 될 개념은 대부분 폴리 필과 데모로 예상됩니다.


0 단계 : Strawman 이 이름은 TC-39에 따라 일종의 구속력이 없지만 상황을 감안할 때 후속 작업이나 조사 대상으로 선정되지 않은 개념의 범주입니다.

각 레벨은 포괄적 인 반면 4는 3에 2가 포함됩니다.이 합산이 미래의 누군가를 돕기를 바랍니다.


15

이 단계는 TC39 프로세스에 의해 정의 된대로 단계적이지만 유용한 아이디어에서 ES6와 같은 수용 가능한 표준으로 기능을 작동시킵니다. 모든 코너 케이스에 대해 논의하고, 생각하고, 테스트하고, polyfilled하고, 더 많은 것을 논의 해야하는 등의 과정으로 인해 시간이 걸립니다. 즉, 표준 기관입니다. 목표는 "ES5"를 말하는 것과 마찬가지로 "ES6"을 말하는 것은 온전하고 완전한 의미를 갖습니다.

실제로, 프로젝트 요구 사항은 유지하기 위해 노력하는 것부터 사실에 이르기까지 매우 편리한 언어 기능을 사용하는 것이 좋습니다. 다음 링크로 시작하고 싶을 것입니다.

  • TC39 프로세스 개요 : 여기에는 단계의 의미와 기능이 단계마다 어떻게 진행되는지에 대한 멋진 차트가 포함되어 있습니다. 아래는 TC39의 개요입니다.

  • 진행중인 제안서 : 특정 제안서의 단계에 대한 간단한 개요. 또한 완성 된, 비활성 및 단계 0 제안서에 대한 링크도 포함합니다. 2017 년 4 월 현재, Public Class Fields는 2 단계에 있습니다. 즉, 정확하게 설명되고 검토자가 배정되었지만 완전히 검토되지는 않았습니다.

  • 3 단계 용 Babel 사전 설정 패키지 : 모든 3 단계 제안에 대해 Git 및 NPM에 대한 링크가있는 플러그인 페이지. 기본적으로이 플러그인은 이론적으로 TC39 3 단계의 현재 제안을 폴리 필하는 패키지 모음을 가져옵니다. 실제로 버그가 발생할 수 있습니다. 또한 비슷한 것을 찾을 수 있습니다. 마찬가지로 2 단계 이하 의 플러그인 페이지에 연결 됩니다. 해당 페이지는 3 단계 제안서와 덜 안정적인 제안서가 모두 포함 된 패키지로 연결됩니다.

  • Babel Preset 'env' :이 Babel 프리셋은 완성 된 제안을 지원하여 알려진 환경에서 이러한 기능을 지원하는 데 필요한 올바른 패키지를 선택합니다. 예를 들어 로컬 node실행 파일은 이전 브라우저보다 플러그인 수가 적습니다. 승인 된 향후 기능을 지원하는 'stage-4'플러그인을 생각할 수 있습니다.

요약하면 이러한 시험판 기능을 사용하는 경우에만 처리하면됩니다. 그것들을 사용해야 할 필요가 있다면, 가장 많은 수의 스테이지를 선택하십시오. 워터 쿨러 주변에서 토론 할 수있는 미친 기능을 갖춘 장난감 설치를 원한다면 0 단계를 진행하십시오.


고맙습니다, 그래서 babel-env는 일종의 babel-recommanded-configuration입니다
Webwoman

4

이것이 가장 이해하기 좋은 출발점입니다. 바벨 프리셋이란?

링크에서 발췌 :

Stage 0-Strawman : 아이디어, 가능한 Babel 플러그인.
1 단계-제안 : 작업 할 가치가 있습니다.
2 단계-초안 : 초기 사양.
3 단계-후보 : 전체 사양 및 초기 브라우저 구현.
4 단계-완료 : 다음 해 릴리스에 추가됩니다.

전체 사진 :

  1. 시간이 지남에 따라 Javascript가 진화하고 점점 더 많은 기능이 언어에 추가되고 있습니다.
  2. 또한 브라우저는 이러한 새로운 기능을 구현할 수 있도록 많은 작업을 수행해야합니다. 이 프로세스는 일반적으로 Javascript가 발전하는 속도보다 훨씬 느립니다.
  3. 그러나 개발자는 코드를보다 쉽게 ​​작성, 이해 및 유지 관리 할 수 ​​있도록 새로운 언어 기능을 사용하려고합니다.
  4. 따라서 개발자는 새로운 Javascript 기능을 사용하여 코드를 작성하지만 코드가 브라우저에 도달하기 전에 새로운 기능을 가진 모든 코드가 브라우저에서 이해할 수있는 코드로 변환되는 빌드 프로세스를 거칩니다. 즉, 자바 스크립트의 새로운 기능이지만 브라우저가 이해할 수있는 언어 구성을 사용하여 코딩됩니다.
  5. 빌드 매직은 도구를 사용하여 수행 할 수 있으며 그 중 하나는 Babel입니다.
  6. Babel이 작동하는 방식은 플러그인 세트가 필요하다는 것입니다. 이러한 각 플러그인은 Javscript의 특정 새로운 기능을 브라우저가 이해할 수있는 언어 구성으로 변환하는 것을 의미 할 수 있습니다.
  7. 이러한 플러그인은 수백 가지가 있으며 각 플러그인은 Javascript의 새로운 기능을 나타냅니다. 이러한 기능은 최종 Javascript 사양의 일부일 수도 있고 아닐 수도 있습니다. 그리고 최종 Javascript 사양으로 돌아 가지 않으면 어떤 브라우저 도이 기능을 구현하지 않습니다. 따라서 개발자가 babel 플러그인을 사용하여 JS의 실험 기능을 사용하는 경우 위험을 감수해야합니다. 사양에 미치지 못하면 코드의 일부를 브라우저에 배포하기 전에 항상 변환해야합니다.
  8. 이 위험은 모든 기능이 최종 사양에 도달 할 가능성을 나타 내기 위해 다양한 수준으로 분류됩니다.
  9. 또한 babel은 이러한 플러그인을 다양한 세트로 그룹화 preset했으며이를 babel의 용어로 불렀습니다 . 각 사전 설정에는 다양한 위험 수준의 플러그인이 포함되어 있습니다.
  10. preset-0그것은 매우 실험적인 기능을위한 플러그인을 가지고있어서 최종 사양으로 만들 위험이 높다는 것을 의미합니다. 그것은 자바 스크립트가 특정 기능을 가져야한다는 개발자에게 나온 아이디어와 같으며, TC-39 제안 프로세스로 가져 오기 위해 몇 가지 작업을 수행했습니다.
  11. preset-1 TC-39에서 채택한 기능 아이디어를위한 플러그인이 포함되어 있으며, 작업 할 가치가 있다고 생각합니다.
  12. preset-2기능에 대한 초기 초안이 준비된 기능을위한 플러그인. 그리고 계속 ..

따라서 0 단계의 기능이 일정 시간 동안 2 단계에 도달하여 다음에 Javascript의 다음 릴리스에있게 될 수 있습니다.

따라서 이러한 Babel Preset의 각 버전마다 다른 플러그인 세트를 찾을 수 있습니다. 단계 0의 기능이 일부 변경을 거쳐 기능의 작동 방식을 변경했을 수도 있습니다. 그리고 완전히 다른 API로 stage-2라고합시다. 따라서 개발자는 이러한 플러그인을 업데이트 할 때 필요한 코드를 변경해야합니다.


3

원래 질문은 "babel-preset-stage-0, babel-preset-stage-1, babel-preset-stage-2와 babel-preset-stage-3의 차이점은 무엇입니까?"입니다. TC39 stage-0, stage-1 .. terminology "사이에 투표"를 표시하고 유일하게 관련성이있는 (정확하지는 않지만) 다운 투표합니다. babel 사이트에서 인용하려면 :

Babel 사전 설정은 공유 가능한 플러그인 목록입니다.

공식 Babel Stage 사전 설정은 JavaScript의 새로운 구문 제안에 대한 TC39 스테이징 프로세스를 추적했습니다.

각 사전 설정 (예 : 3 단계, 2 단계 등)에는 해당 특정 단계 및 그 위에있는 모든 플러그인이 포함되어 있습니다. 예를 들어, stage-2에는 stage-3 등이 포함되었습니다.

핵심 아이디어는 '위의 아이디어'입니다. 위의 답변이 그 부분에서 매우 우수하기 때문에 후반에는 답변하지 않습니다.


-20

나는 그것을 가지고있다. 당신은 https://babeljs.io/docs/plugins/preset-stage-0/ 을 참조 할 수 있습니다

한마디로, 가지고 preset-stage-0있는 모든 기능을 포함하고 preset-stage-1있으며, 가지고 preset-stage-1있는 모든 기능 등을 포함합니다 preset-stage-2.

낮은 자릿수가 더 강력합니다. 프로젝트에서 문제를 걱정하지 않으려면 설정하십시오 stage-0...


15
그러나 stage-0실제로 등 이 무엇인지 이해 합니까? "더 낮은 숫자가 더 강력합니다"라고 말하고 있기 때문에 나는 믿지 않습니다.
Felix Kling 2016 년

2
사실, 나는 혼란 stageES6@RGraham는 지적했다 The Babel Preset which contains only ES6 features is preset-es2015. 감사!
flyingzl

나중에 문제가 발생하면 stage-0을 사용하십시오! stage-0 기능의 일부 또는 전부가 전혀 ES 사양에 포함되지 않을 수 있습니다. 따라서 스테이지 0 기능 사용에주의하십시오.
devsnd

이 답변이 왜 투표에 실패했는지 잘 모르겠습니다. 그가 말하는 것은 맞습니다. TC39 stage-0은 기본적으로 신뢰할 수없는 제안입니다. 그들은 최종 제안을 할 수도 있고하지 않을 수도 있습니다. 그러나 babel-preset-stage-0이르기까지, 모든 플러그인을 포함 stage-0하는 stage-3. 그것은 제안에 적용 할 수 있는지 여부에 관계없이 제안 된 모든 기능을 원한다는 것을 의미합니다.
Gaurav Kumar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.