IE 11에서 리액트 쓰기

문제 상황 !
기본적인 CRA로는 IE 11를 지원하지 못함

  1. 첫 번째 시도

    • react-app-polyfill을 install 후 import 시켜주고 node_modules에서 .cache를 지우고 package.jsonbrowsers list"ie 11"을 추가했지만 ie11에서 The error you provided does not contain a stack trace. 라는 에러를 내며 동작하지 않음.
    1
    2
    import "react-app-polyfill/ie11";
    import "react-app-polyfill/stable";
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // package.json
    "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. 두 번째 시도

    • npm i fast-text-encoding후 import 시켜줬지만 같은 에러를 내며 동작하지 않음
    1
    import "fast-text-encoding/text";


  1. 세 번째 시도


v3.3.0react-scripts 패키지 일 때

1
2
3
4
5
6
7
8
9
10
11
// Connect to WebpackDevServer via a socket.
var connection = new WebSocket(
url.format({
protocol: window.location.protocol === "https:" ? "wss" : "ws",
hostname: window.location.hostname,
port: window.location.port,
// Hardcoded in WebpackDevServer
pathname: "/sockjs-node",
slashes: true,
})
);


2020.02.22 추가

세 번째 시도가 필요했던 이유:

  1. https 프로토콜 사용 시에는 WebSockets over SSL/TLS (WSS) 프로토콜을 사용해야 하는데, create-react-app 하위 패키지인 react-scripts 패키지 v3.3.0 에서 http 와 https 모두 WebSockets (WS) 를 사용하도록 설정되어 있어서 생긴 이슈
  2. react-scripts 패키지 v3.3.0 에서 webPackDevServer 설정이 SockJS에서 WebSocket으로 전환되었다. url.formatws://localhost이 아니라 ws:localhost처럼 URL을 리턴하기 때문에(no slashes) IE에서 Syntax Error를 던진다.

2020.02.14에 3.4.0 버전으로 업데이트 됨!

https://github.com/facebook/create-react-app/releases