Create-react-app: Aplicativos com `react-scripts` v4.0.0 não funcionam no IE11

Criado em 25 out. 2020  ·  18Comentários  ·  Fonte: facebook/create-react-app

Descreva o bug

Depois de atualizar meu aplicativo de react-scripts 3.4.4 para 4.0.0, vejo que o aplicativo não funciona no IE11.
Além disso - quando criei um novo aplicativo a partir do CRA mais recente, adicionei react-app-polyfill , vejo que também não está funcionando.
image

Meu package.json tem esta aparência:

{
  "name": "cra4",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^5.11.4",
    "@testing-library/react": "^11.1.0",
    "@testing-library/user-event": "^12.1.10",
    "@types/jest": "^26.0.15",
    "@types/node": "^12.0.0",
    "@types/react": "^16.9.53",
    "@types/react-dom": "^16.9.8",
    "react": "^17.0.1",
    "react-app-polyfill": "2.0.0",
    "react-dom": "^17.0.1",
    "react-scripts": "4.0.0",
    "typescript": "^4.0.3",
    "web-vitals": "^0.2.4"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ]
  }
}

O mesmo erro também aparece quando executo yarn build e sirvo do diretório build/ .

Você tentou recuperar suas dependências?

É o comportamento padrão do CRA.

Quais termos você pesquisou no Guia do usuário?

Existem alguns problemas comuns documentados, como o observador não detecta alterações ou falha de compilação. Eles são descritos na seção Solução de problemas do Guia do usuário: https://facebook.github.io/create-react-app/docs/trou troubleshooting Por favor, examine estas poucas seções para problemas comuns. Além disso, você pode pesquisar no próprio Guia do usuário algo com o qual está tendo problemas: https://facebook.github.io/create-react-app/ Se você não encontrou a solução, compartilhe as palavras que você pesquisou . Isso nos ajuda a melhorar a documentação para futuros leitores que podem encontrar o mesmo problema.

(Escreva sua resposta aqui, se for o caso.)

Meio Ambiente

Para ajudar a identificar se um problema é específico de uma plataforma, navegador ou versão do módulo, são necessárias informações sobre seu ambiente. Isso permite que os mantenedores reproduzam rapidamente o problema e forneçam feedback. Execute o seguinte comando na pasta do aplicativo React no terminal. Observação: o resultado é copiado diretamente para a área de transferência. `npx create-react-app --info` Cole a saída do comando na seção abaixo.
Environment Info:

  current version of create-react-app: 3.4.1
  running from C:\Users\XXX\AppData\Local\Yarn\Data\global\node_modules\create-react-app

  System:
    OS: Windows 10 10.0.19041
    CPU: (16) x64 AMD Ryzen 7 3700X 8-Core Processor
  Binaries:
    Node: 14.14.0 - C:\Program Files\nodejs\node.EXE
    Yarn: 1.22.5 - C:\Program Files (x86)\Yarn\bin\yarn.CMD
    npm: 6.14.8 - C:\Program Files\nodejs\npm.CMD
  Browsers:
    Edge: 44.19041.423.0
    Internet Explorer: 11.0.19041.1
  npmPackages:
    react: ^17.0.1 => 17.0.1
    react-dom: ^17.0.1 => 17.0.1
    react-scripts: 4.0.0 => 4.0.0
  npmGlobalPackages:
    create-react-app: Not Found

Passos para reproduzir

  1. Crie um novo aplicativo CRA com o modelo de texto digitado usado
  2. yarn add react-app-polyfill
  3. Adicione import 'react-app-polyfill/ie11'; import 'react-app-polyfill/stable'; ao topo de index.tsx
  4. yarn start
  5. Observe que o site funciona perfeitamente em navegadores normais e é uma tela em branco no IE

Comportamento esperado

Como você esperava que a ferramenta se comportasse? Tudo bem se você não tiver certeza de que seu entendimento está correto. Apenas escreva o que você pensou que aconteceria.

O site deve funcionar (não estou esperando milagres. É um IE no geral, mas a página em branco é muito ruim)

Comportamento real

Algo deu errado? Algo está quebrado ou não está funcionando como você esperava? Anexe capturas de tela, se possível! Eles são extremamente úteis para diagnosticar problemas.

image

Demonstração reproduzível

Se você puder, compartilhe um projeto que reproduza o problema. Esta é a forma mais eficaz de corrigir um problema em breve. Existem duas maneiras de fazer isso: * Crie um novo aplicativo e tente reproduzir o problema nele. Isso é útil se você souber aproximadamente onde está o problema ou não puder compartilhar o código real. * Ou copie seu aplicativo e remova coisas até que você tenha a demonstração reproduzível mínima. Isso é útil para encontrar a causa raiz. Você pode então criar opcionalmente um novo projeto. Este é um bom guia para a criação de demonstrações de bug: https://stackoverflow.com/help/mcve Quando terminar, envie o projeto para o GitHub e cole o link abaixo:

(Cole o link para um projeto de exemplo e instruções exatas para reproduzir o problema.)

O que acontece se você pular esta etapa? Tentaremos ajudá-lo, mas em muitos casos é impossível porque faltam informações cruciais. Nesse caso, marcaremos um problema como de baixa prioridade e, eventualmente, o fecharemos se não houver uma direção clara. Ainda apreciamos o relatório, pois eventualmente outra pessoa pode criar um exemplo reproduzível para ele. Obrigado por nos ajudar a ajudá-lo!
bug report needs triage

Comentários muito úteis

+, mesmo problema na construção de produção
https://reactjs.org/docs/error-decoder.html/?invariant=31&args [] = object% 20with% 20keys% 20% 7B% 24% 24typeof% 2C% 20type% 2C% 20key% 2C% 20ref% 2C % 20props% 2C% 20_owner% 7D
image

Todos 18 comentários

Se não me engano, um novo projeto não funcionará no IE em modo de desenvolvimento devido à configuração browserslist .

image

(veja package.json ).

@ Pierre-Do
Sim, atualizei meu problema com as informações ausentes.
Esqueci que o IE11 não é compatível com o uso imediato, mas com react-app-polyfill também não está funcionando :(

+, mesmo problema na construção de produção
https://reactjs.org/docs/error-decoder.html/?invariant=31&args [] = object% 20with% 20keys% 20% 7B% 24% 24typeof% 2C% 20type% 2C% 20key% 2C% 20ref% 2C % 20props% 2C% 20_owner% 7D
image

minha solução alternativa:

import 'react-app-polyfill/ie11';
// import 'react-app-polyfill/stable';
import 'core-js/stable';
import 'regenerator-runtime/runtime';

Também sou afetado por este problema

Posso confirmar que a solução @ezBill funciona para mim.
Talvez react-app-polyfill precise ser consertado?

Posso confirmar que a solução @ezBill funciona para mim.

+1

A solução alternativa não está funcionando para mim, o erro permanece.

Meus polyfills são assim e não tenho problemas com o IE11:

import "react-app-polyfill/ie11";
import "react-app-polyfill/stable";

Observe que eles devem vir acima de quaisquer outras importações que quebrariam sem esses polyfills no lugar. Além disso, o polyfill não fornece algumas APIs mais esotéricas, como TextEncoder então você ainda precisará carregar polyfills para eles se precisar deles por algum motivo.

Acho que a nova transformação jsx está causando isso, tente desabilitá-la adicionando /** <strong i="5">@jsxRuntime</strong> classic */ ao topo de seu index.js principal, onde você também importa seus polyfills - ou defina DISABLE_NEW_JSX_TRANSFORM=true variável de ambiente. No meu caso, qualquer uma dessas corrige isso.

Meu palpite é que, importando polyfills primeiro, você pode fazer com que carreguem antes de reagir, mas não pode fazer com que carreguem antes da linha import {jsx as _jsx} from 'react/jsx-runtime'; que o compilador insere.

@msbarry Posso confirmar que isso corrige o problema aqui. Obrigado pela ajuda!

Encontramos esse mesmo problema. Já convertemos muito da nossa base de código para o novo formato JSX (o formato em que você não precisa mais importar React ).

Boas notícias! Conseguimos manter toda a nova sintaxe JSX!

Só tivemos que aplicar isso ao topo de nosso arquivo src/index.js .

/** <strong i="10">@jsxRuntime</strong> classic */
import 'react-app-polyfill/ie11'

// IE11 needs "jsxRuntime classic" for this initial file which means that "React" needs to be in scope
// https://github.com/facebook/create-react-app/issues/9906
import React from 'react'

Adicionou o comentário porque, caso contrário, poderíamos ver isso sendo algo que as pessoas não entenderiam e provavelmente deixariam para sempre na base de código.

A única desvantagem é que não conseguimos que o treehaking reduza o tamanho do nosso pacote, o que foi um dos principais motivos pelos quais atualizamos para o React 17 :(

FWIW dividimos o arquivo index.ts em um arquivo init.ts e main.tsx onde init.ts importa todos os polyfills relevantes e main.tsx é o ponto de entrada real ( contendo o código React) e index.ts apenas importa os dois em sequência. Isso garante que todos os módulos que podem precisar dos polyfills para entrar em vigor sejam carregados após os polyfills e a nomenclatura garante que, mesmo ao usar a classificação automática de importações, os polyfills venham antes do ponto de entrada principal.

Esta pode ser uma solução mais viável do que ter que contornar esse problema.

Nenhuma das opções acima parece estar funcionando.

Erros do IE11 com

image

Clicar no erro nos traz aqui

image

Versão IE

image

Aqui está um exemplo super simples para reproduzir

  1. npx create-react-app ie11app
  2. yarn add react-app-polyfill
  3. Atualize o index.js
/** <strong i="23">@jsxRuntime</strong> classic */
import 'react-app-polyfill/ie11';
import 'react-app-polyfill/stable';
import React from 'react';
import ReactDOM from 'react-dom';

ReactDOM.render(
    <div>Come on</div>,
  document.getElementById('root')
);
  1. Adicione ie 11 a browerslist em package.json
{
  "name": "ie11app",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^5.11.4",
    "@testing-library/react": "^11.1.0",
    "@testing-library/user-event": "^12.1.10",
    "react": "^17.0.1",
    "react-app-polyfill": "^2.0.0",
    "react-dom": "^17.0.1",
    "react-scripts": "4.0.0",
    "web-vitals": "^0.2.4"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all",
      "ie 11"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version",
      "ie 11"
    ]
  }
}
  1. yarn start

Tente remover import 'react-app-polyfill/stable'; de index.js.

Você só precisa de import 'react-app-polyfill/ie11'

Isso não parece ser um problema de polyfill. O código que você está vendo no depurador não é ES5, ele usa desestruturação e argumentos padrão, nenhum dos quais é compatível com o IE11. Tente usar "ie >= 11" em seu browserslist vez de "ie 11" . É o que eu tenho, não tenho certeza se alguma das sintaxes deve funcionar.

@ Dan503 @pluma Eu tentei ambos, "ie >= 11" e removendo import 'react-app-polyfill/stable'; , mas ainda sem sorte.

Você poderia ser tão gentil e criar um novo npx create-react-app ie11app e verificar se ele realmente ainda está funcionando para você no IE11?

Obrigado

Atualizar:
Reverter para "react-scripts": "^3.0.0" funciona em IE 11 mesmo com "react": "^17.0.1",
Mas "react-scripts": "4.0.0" ainda está quebrado para mim

Também tentei muitas dessas soluções. O único que funcionou foi rebaixar react-scripts para 3.4.4 .

Esta página foi útil?
0 / 5 - 0 avaliações