Respostas:
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
stage-0
mas 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).
preset-es2015
por babel-preset-node6
esses dias, se estiver executando o Nó 6 ou melhor.
babel-preset-env
que pode atingir qualquer ambiente!
babel-preset-env
INSTEAD OF babel-preset-es2015
. babel-preset-es2015
está quase desatualizado
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:
Pronto para inclusão no ECMAScript Standard, passou nos testes e fará parte da próxima revisão
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.
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.
Cada nível é inclusivo, enquanto 4 inclui 3 inclui 2 e assim por diante ... Espero que esse somatório ajude alguém no futuro.
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 node
executá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.
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 :
preset
nos termos do babel. E cada predefinição contém plug-ins de vários níveis de risco.preset-0
Isso 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.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.preset-2
Plug-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.
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.
Eu tenho isso. Vocês podem consultar https://babeljs.io/docs/plugins/preset-stage-0/
Em uma palavra curta, preset-stage-0
contém toda a funcionalidade que preset-stage-1
possui e preset-stage-1
contém toda a funcionalidade que preset-stage-2
possui 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
...
stage-0
etc é realmente? Como você diz "O dígito mais baixo é mais poderoso.", Acredito que não.
stage
com ES6
, @RGraham apontou isso The Babel Preset which contains only ES6 features is preset-es2015
. Obrigado!
babel-preset-stage-0
inclui todos os plugins, variando de stage-0
até stage-3
. Isso significa que eu quero todos os recursos propostos, não importa se eles podem fazer a proposta ou não.
stage-1
? É seguro usar? Algunsstage-1
recursos podem ser descontinuados e as APIs alteradas no futuro?