Qual é a diferença entre babel-preset-stage-0, babel-preset-stage-1 etc?

126

A minha pergunta é: Qual é a diferença entre babel-preset-stage-0, babel-preset-stage-1, babel-preset-stage-2e babel-preset-stage-3, e qual é a melhor escolha quando desenvolvemos com ES6?

flyingzl
fonte

Respostas:

97

As predefinições de estágio de Babel são equiparadas ao Processo TC39 e aos diferentes estados de cada proposta para uma possível mudança de idioma. Eles incluem implementações e polyfills para todas as alterações propostas nesse estágio.

Qualquer coisa atualmente Stage-0é Strawman, não ES6. É um futuro Javascript e não está absolutamente certo de que algum dia ele fará parte de qualquer especificação oficial do ECMAScript.

Por favor, não apenas defina comostage-0 para que funcione sem entender as consequências que isso terá.

A predefinição de Babel, que contém apenas os recursos do ES6, é preset-es2015

CodingIntrigue
fonte
3
Que tal stage-1? É seguro usar? Alguns stage-1recursos podem ser descontinuados e as APIs alteradas no futuro?
notgiorgi
4
@notgiorgi Safer que stage-0mas nem por isso inteiramente a salvo de mudança ou até mesmo depreciação total (ver proposta construtor Chamada que foi retirado após Fase 1). Mas o mesmo poderia ser dito de qualquer estágio diferente do estágio 4 (isto é, concluído).
CodingIntrigue
Você pode substituir preset-es2015por babel-preset-node6esses dias, se estiver executando o Nó 6 ou melhor.
Dave Sag
5
Ou melhor ainda, babel-preset-envque pode atingir qualquer ambiente!
CodingIntrigue
5
Guyz Por favor, use babel-preset-envINSTEAD OF babel-preset-es2015. babel-preset-es2015está quase desatualizado
vijay 30/03
53

Como elaborado principalmente por outras respostas. O estágio 4 é o mais estável e o estágio 0, o mais perigoso. Aqui está um detalhamento de alto nível para as 5 etapas das respostas anteriores e da documentação. Estou adicionando isso porque, quando cheguei a isso, esperava uma quebra de mais alto nível do que é cada estágio:


Etapa 4: Concluído

Pronto para inclusão no ECMAScript Standard, passou nos testes e fará parte da próxima revisão


Etapa 3: Candidato

Inclui um texto completo de especificações e plugins que foram testados e fornecidos com feedback. A solução está completa e todas as alterações adicionais são baseadas na experiência de implementação.


Etapa 2: Rascunho

Suporte adicional para plug-ins concluídos o máximo possível. Os requisitos para isso são atendidos principalmente com apenas alterações incrementais a caminho. A semântica e a API devem estar completas. Provavelmente se tornará parte das especificações.


Etapa 1: Proposta É esperado um conceito que tenha sido descoberto e selecionado para ser examinado nessa fase, na maioria dos casos, de preenchimentos e demonstrações.


Etapa 0: Strawman Esse nome me fez rir de acordo com o TC-39, que não tem nenhum tipo de limite, mas, dado o contexto, é a categoria de conceitos que não foram selecionados para serem seguidos ou examinados.

Cada nível é inclusivo, enquanto 4 inclui 3 inclui 2 e assim por diante ... Espero que esse somatório ajude alguém no futuro.

Chamada na
fonte
15

Os estágios representam os estágios definidos pelo processo do TC39 que trabalha com recursos de idéias malucas, mas úteis, em padrões aceitos, como o ES6. O processo leva algum tempo, pois cada caso de canto deve ser discutido, pensado, testado, preenchido com polifilme, discutido um pouco mais, etc. Ou seja, é um órgão de padrões. O objetivo é dizer "ES6" terá um significado completo e completo, assim como dizer "ES5".

Na prática, os requisitos do seu projeto podem variar de permanecer ao experimentado e fiel a brincar com recursos de idioma tão convenientes, embora nebulosos. Você provavelmente deseja começar com estes links:

  • Visão geral do processo do TC39 : inclui um gráfico detalhado do significado dos estágios e de como os recursos progridem de estágio para estágio. Abaixo disso, há uma visão geral do TC39.

  • As propostas ativas : Uma rápida visão geral do estágio em que determinadas propostas estão. Também inclui links para as propostas Concluídas, Inativas e Etapa 0. Hoje, em abril de 2017, os Campos de classe pública estão no estágio 2, o que significa que são descritos com precisão e os revisores foram designados, mas não são totalmente revisados.

  • O pacote predefinido Babel para o estágio 3 : a página do plug-in, com links para o Git e o NPM, para todas as propostas do estágio 3. Basicamente, esse plug-in atrai a coleção de pacotes que, em teoria, polifillam as propostas atuais no estágio 3. do TC39. Na prática, podem ocorrer erros. Além disso, você pode encontrar o mesmo link similar para as páginas de plug-in do Estágio 2 e abaixo. Essas páginas serão vinculadas a pacotes que incluem propostas do Estágio 3 e propostas menos estáveis.

  • Predefinição de Babel 'env' : essa predefinição de Babel suporta propostas concluídas, selecionando os pacotes corretos necessários para suportar esses recursos em um ambiente conhecido. Por exemplo, um nodeexecutável local requer menos plug-ins que um navegador mais antigo. Pode-se pensar no plug-in 'stage-4' que suporta recursos futuros aprovados.

Em resumo, você só precisa lidar com esses recursos de pré-lançamento se os usar. Se você precisar usá-los, escolha o maior número de estágios com o que você precisa. Se você quer apenas uma instalação de brinquedo com recursos malucos para discutir em torno do bebedouro, vá em frente e pegue o estágio 0.

Charles Merriam
fonte
graças, por isso babel-env é um tipo de recommanded-babel-configuração
Webwoman
4

Este é o melhor ponto de partida para entender. O que são predefinições de babel

Um trecho do link:

Etapa 0 - Strawman: apenas uma idéia, possível plug-in Babel.
Etapa 1 - Proposta: vale a pena trabalhar nisso.
Etapa 2 - Rascunho: especificação inicial.
Etapa 3 - Candidato: especificações completas e implementações iniciais do navegador.
Etapa 4 - Finalizado: será adicionado ao próximo lançamento anual

Imagem geral :

  1. Com o tempo, o Javascript está evoluindo e mais e mais recursos estão sendo adicionados ao idioma.
  2. Os navegadores também precisam fazer muito trabalho para poder implementar esses novos recursos para serem entendidos por eles. Esse processo em geral é muito mais lento que o ritmo que o Javascript está evoluindo.
  3. Mas os desenvolvedores querem usar os novos recursos da linguagem, pois facilitam a escrita, a compreensão e a manutenção do código.
  4. Assim, os desenvolvedores escrevem seu código usando os novos recursos Javascript, mas antes que esse código chegue aos navegadores, ele passa por um processo de construção onde, usando alguma mágica, todo o código com novos recursos é transpilado em código compreensível pelo navegador. ou seja, novos recursos do Javascript, mas codificados usando construções de linguagem compreensíveis do navegador.
  5. A mágica da construção pode ser realizada usando ferramentas, uma delas sendo Babel.
  6. O modo como o Babel funciona é que é necessário um conjunto de plugins. Cada um desses plug-ins pode se referir à transformação de um novo recurso específico do Javscript em construções de linguagem compreensíveis do navegador.
  7. Existem centenas desses plugins, cada um referente a novos recursos diferentes do Javascript. Esses recursos podem ou não fazer parte da especificação final do Javascript. E se ele nunca chegar às especificações finais do Javascript, nenhum dos navegadores implementará esse recurso. Portanto, se algum desenvolvedor usa algum recurso experimental do JS usando o plugin babel, é o risco que ele está assumindo. Se nunca terminar nas especificações, essa parte do código sempre terá que ser transpilada antes de ser implantada nos navegadores.
  8. Esse risco é classificado em vários níveis para indicar as chances de qualquer recurso atingir a especificação final.
  9. Além disso, o babel agrupou esses plugins em vários conjuntos, o que é chamado de a presetnos termos do babel. E cada predefinição contém plug-ins de vários níveis de risco.
  10. preset-0Isso significa que ele possui plugins para recursos muito experimentais e, portanto, com alto risco de chegar às especificações finais. É como uma ideia que chegou a um desenvolvedor que o Javascript deveria ter um recurso específico, e ele fez algum trabalho para levá-lo ao processo de proposta do TC-39.
  11. preset-1 Ele contém os plugins para as idéias de recursos aceitas pelo TC-39, e eles acham que vale a pena trabalhar.
  12. preset-2Plug-ins para recursos em que um rascunho inicial está pronto para o recurso. E continua ..

Assim, pode acontecer que um recurso no Estágio 0 chegue ao Estágio 2 em algum tempo e acabe sendo na próxima versão do Javascript mais algum tempo depois.

Portanto, com cada versão dessas predefinições de Babel, você pode encontrar diferentes conjuntos de plug-ins. Também pode acontecer que um recurso no estágio 0 tenha passado por algumas mudanças e que tenha feito alterações na forma como funciona. E chegou, digamos, estágio 2 com uma API totalmente diferente. Portanto, os desenvolvedores precisam garantir que, ao atualizar esses plugins, façam as alterações necessárias em seu código.

Gaurav Kumar
fonte
3

A pergunta original é "Qual é a diferença entre babel-preset-stage-0, babel-preset-stage-1, babel-preset-stage-2 e babel-preset-stage-3", é estranho que as respostas se concentrem na "diferença entre a terminologia TC39 estágio 0, estágio 1 .. "são votados, enquanto o único relevante (embora não preciso) é recusado. Para citar o site babel:

Uma predefinição de Babel é uma lista compartilhável de plugins.

As predefinições oficiais do Babel Stage acompanharam o processo de preparo do TC39 para novas propostas de sintaxe em JavaScript.

Cada predefinição (por exemplo, estágio 3, estágio 2, etc.) incluía todos os plugins para esse estágio específico e os que estavam acima dele. Por exemplo, o estágio 2 incluiu o estágio 3 e assim por diante.

A idéia central é 'as que estão acima'. Não estou respondendo a segunda metade, pois as respostas acima são muito boas nessa parte.

Pu Guan
fonte
-20

Eu tenho isso. Vocês podem consultar https://babeljs.io/docs/plugins/preset-stage-0/

Em uma palavra curta, preset-stage-0contém toda a funcionalidade que preset-stage-1possui e preset-stage-1contém toda a funcionalidade que preset-stage-2possui e assim por diante ...

O dígito mais baixo é mais poderoso. No seu projeto, se você não quer se preocupar com problemas, basta definir stage-0...

flyingzl
fonte
15
Mas você entende o que stage-0etc é realmente? Como você diz "O dígito mais baixo é mais poderoso.", Acredito que não.
Felix Kling 16/05
2
Na verdade, eu confundi o stagecom ES6, @RGraham apontou isso The Babel Preset which contains only ES6 features is preset-es2015. Obrigado!
flyingzl
Se você quiser ter problemas mais tarde, use o estágio 0! Alguns ou todos os recursos do estágio 0 podem não estar na especificação do ES. Portanto, cuidado com o uso dos recursos do estágio 0.
devsnd
Não sei por que essa resposta é tão votada. O que ele está dizendo está correto. O estágio 0 do TC39 é basicamente propostas que não são confiáveis. Eles podem ou não chegar à proposta final. Mas babel-preset-stage-0inclui todos os plugins, variando de stage-0até stage-3. Isso significa que eu quero todos os recursos propostos, não importa se eles podem fazer a proposta ou não.
Gaurav Kumar 13/09