Create-react-app: `react-scripts` v4.0.0์ด์žˆ๋Š” ์•ฑ์€ IE11์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2020๋…„ 10์›” 25์ผ  ยท  18์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: facebook/create-react-app

๋ฒ„๊ทธ ์„ค๋ช…

๋‚ด ์•ฑ์„ react-scripts 3.4.4์—์„œ 4.0.0์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•œ ํ›„ ์•ฑ์ด IE11์—์„œ ์ „ํ˜€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ์ตœ์‹  CRA์—์„œ ์ƒˆ ์•ฑ์„ ๋งŒ๋“ค์—ˆ์„ ๋•Œ react-app-polyfill ์ถ”๊ฐ€ํ–ˆ๋Š”๋ฐ ์ „ํ˜€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.
image

๋‚ด package.json ์€ (๋Š”) ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

{
  "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"
    ]
  }
}

yarn build ํ•˜๊ณ  build/ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์ œ๊ณต ํ•  ๋•Œ๋„ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

์ข…์†์„ฑ์„ ๋ณต๊ตฌํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๊นŒ?

๊ธฐ๋ณธ CRA ๋™์ž‘์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ๊ฐ€์ด๋“œ์—์„œ ์–ด๋–ค ์šฉ์–ด๋ฅผ ๊ฒ€์ƒ‰ ํ–ˆ์Šต๋‹ˆ๊นŒ?

๊ฐ์‹œ์ž๊ฐ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•˜๊ฑฐ๋‚˜ ๋นŒ๋“œ ์‹คํŒจ์™€ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ์ผ๋ฐ˜์ ์ธ ๋ฌธ์„œํ™” ๋œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ๊ฐ€์ด๋“œ์˜ ๋ฌธ์ œ ํ•ด๊ฒฐ ์„น์…˜์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. https://facebook.github.io/create-react-app/docs/troubleshooting ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋‹ค์Œ ๋ช‡ ๊ฐ€์ง€ ์„น์…˜์„ ์Šค์บ”ํ•˜์‹ญ์‹œ์˜ค. ๋˜ํ•œ ์‚ฌ์šฉ์ž ๊ฐ€์ด๋“œ ์ž์ฒด์—์„œ ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ํ•ญ๋ชฉ์„ ๊ฒ€์ƒ‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://facebook.github.io/create-react-app/ ์†”๋ฃจ์…˜์„ ์ฐพ์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ๊ฒ€์ƒ‰ ํ•œ ๋‹จ์–ด๋ฅผ ๊ณต์œ ํ•˜์„ธ์š”. . ์ด๋Š” ๋™์ผํ•œ ๋ฌธ์ œ์— ์ง๋ฉด ํ•  ์ˆ˜์žˆ๋Š” ๋ฏธ๋ž˜์˜ ๋…์ž๋ฅผ ์œ„ํ•ด ๋ฌธ์„œ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ๋„์›€์ด๋ฉ๋‹ˆ๋‹ค.

(ํ•ด๋‹น๋˜๋Š” ๊ฒฝ์šฐ ์—ฌ๊ธฐ์— ๋‹ต๋ณ€์„ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค.)

ํ™˜๊ฒฝ

๋ฌธ์ œ๊ฐ€ ํ”Œ๋žซํผ, ๋ธŒ๋ผ์šฐ์ € ๋˜๋Š” ๋ชจ๋“ˆ ๋ฒ„์ „๊ณผ ๊ด€๋ จ๋œ ๊ฒƒ์ธ์ง€ ์‹๋ณ„ํ•˜๋ ค๋ฉด ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌ์ž๋Š” ๋ฌธ์ œ๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ์žฌํ˜„ํ•˜๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„์˜ React ์•ฑ ํด๋”์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค. ์ฐธ๊ณ  : ๊ฒฐ๊ณผ๋Š” ํด๋ฆฝ ๋ณด๋“œ์— ์ง์ ‘ ๋ณต์‚ฌ๋ฉ๋‹ˆ๋‹ค. `npx create-react-app --info` ์•„๋ž˜ ์„น์…˜์— ๋ช…๋ น ์ถœ๋ ฅ์„ ๋ถ™์—ฌ ๋„ฃ์Šต๋‹ˆ๋‹ค.
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

์žฌํ˜„ ๋‹จ๊ณ„

  1. ์‚ฌ์šฉ ๋œ typescript ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ƒˆ CRA ์•ฑ ๋งŒ๋“ค๊ธฐ
  2. yarn add react-app-polyfill
  3. ์ถ”๊ฐ€ import 'react-app-polyfill/ie11'; import 'react-app-polyfill/stable'; ์˜ ์ƒ๋‹จ์— index.tsx
  4. yarn start
  5. ์‚ฌ์ดํŠธ๊ฐ€ ์ผ๋ฐ˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•˜๊ณ  IE์—์„œ๋Š” ๋นˆ ํ™”๋ฉด์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ƒ๋˜๋Š” ํ–‰๋™

๋„๊ตฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ ํ–ˆ์Šต๋‹ˆ๊นŒ? ์ดํ•ด๊ฐ€ ์ •ํ™•ํ•˜์ง€ ์•Š๋‹ค๋ฉด ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์ผ์–ด๋‚  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ ์ผ์„ ์ ์œผ์‹ญ์‹œ์˜ค.

์‚ฌ์ดํŠธ๊ฐ€ ์ž‘๋™ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (๊ธฐ์ ์„ ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ „์ฒด์ ์œผ๋กœ IE์ด์ง€๋งŒ ๋นˆ ํŽ˜์ด์ง€๋Š” ๋งค์šฐ ๋‚˜์ฉ๋‹ˆ๋‹ค)

์‹ค์ œ ํ–‰๋™

๋ญ”๊ฐ€ ์ž˜๋ชป ๋˜์—ˆ๋‚˜์š”? ๋ฌธ์ œ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ์˜ˆ์ƒ ํ•œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๊ฐ€๋Šฅํ•˜๋ฉด ์Šคํฌ๋ฆฐ ์ƒท์„ ์ฒจ๋ถ€ํ•˜์„ธ์š”! ๋ฌธ์ œ๋ฅผ ์ง„๋‹จํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

image

์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋ฐ๋ชจ

๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณต์œ ํ•ด์ฃผ์„ธ์š”. ์ด๊ฒƒ์€ ๊ณง ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. * ์ƒˆ ์•ฑ์„ ๋งŒ๋“ค๊ณ  ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ ํ•ด ๋ด…๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€ ๋Œ€๋žต์ ์œผ๋กœ ์•Œ๊ณ  ์žˆ๊ฑฐ๋‚˜ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ๊ณต์œ  ํ•  ์ˆ˜์—†๋Š” ๊ฒฝ์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. * ๋˜๋Š” ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์ตœ์†Œํ•œ์˜ ๋ฐ๋ชจ๊ฐ€ ๋‚จ์„ ๋•Œ๊นŒ์ง€ ์•ฑ์„ ๋ณต์‚ฌํ•˜๊ณ  ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๊ทผ๋ณธ ์›์ธ์„ ์ฐพ๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์„ ํƒ์ ์œผ๋กœ ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฒ„๊ทธ ๋ฐ๋ชจ๋ฅผ ๋งŒ๋“ค๊ธฐ์œ„ํ•œ ์ข‹์€ ๊ฐ€์ด๋“œ์ž…๋‹ˆ๋‹ค : https://stackoverflow.com/help/mcve ์™„๋ฃŒ๋˜๋ฉด ํ”„๋กœ์ ํŠธ๋ฅผ GitHub์— ํ‘ธ์‹œํ•˜๊ณ  ์•„๋ž˜์— ๋งํฌ๋ฅผ ๋ถ™์—ฌ ๋„ฃ์œผ์„ธ์š”.

(์˜ˆ์ œ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋งํฌ์™€ ์ •ํ™•ํ•œ ์ง€์นจ์„ ๋ถ™์—ฌ ๋„ฃ์–ด ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜์‹ญ์‹œ์˜ค.)

์ด ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ ๋›ฐ๋ฉด ์–ด๋–ป๊ฒŒ๋ฉ๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” ๋‹น์‹ ์„ ๋•๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•  ๊ฒƒ์ด์ง€๋งŒ ๋งŽ์€ ๊ฒฝ์šฐ ์ค‘์š”ํ•œ ์ •๋ณด๊ฐ€ ๋ˆ„๋ฝ๋˜์–ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ๋ฌธ์ œ์— ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•˜๊ณ  ๋ช…ํ™•ํ•œ ๋ฐฉํ–ฅ์ด ์—†์œผ๋ฉด ๊ฒฐ๊ตญ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ๋‹ค๋ฅธ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด์— ๋Œ€ํ•œ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์˜ˆ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ๋ณด๊ณ ์„œ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋„์™€ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!
bug report needs triage

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

+, ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ์— ๋Œ€ํ•œ ๋™์ผํ•œ ๋ฌธ์ œ
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

๋ชจ๋“  18 ๋Œ“๊ธ€

๋‚ด๊ฐ€ ์ฐฉ๊ฐํ•˜์ง€ ์•Š์œผ๋ฉด browserslist ๊ตฌ์„ฑ์œผ๋กœ ์ธํ•ด ๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ ์ƒˆ ํ”„๋กœ์ ํŠธ๊ฐ€ IE์—์„œ ์ „ํ˜€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

image

( package.json ).

ํ”ผ์—๋ฅด๋„
์˜ˆ, ๋ˆ„๋ฝ ๋œ ์ •๋ณด๋กœ ๋ฌธ์ œ๋ฅผ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.
IE11์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์žŠ์—ˆ์ง€๋งŒ react-app-polyfill ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

+, ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ์— ๋Œ€ํ•œ ๋™์ผํ•œ ๋ฌธ์ œ
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

๋‚ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• :

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

๋‚˜๋„์ด ๋ฌธ์ œ์˜ ์˜ํ–ฅ์„๋ฐ›์Šต๋‹ˆ๋‹ค.

@ezBill ์†”๋ฃจ์…˜์ด ์ €์—๊ฒŒ
react-app-polyfill ์„ (๋ฅผ) ์ˆ˜์ •ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

@ezBill ์†”๋ฃจ์…˜์ด ์ €์—๊ฒŒ

+1

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์ž‘๋™ํ•˜์ง€ ์•Š๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด polyfill์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ด๊ณ  IE11์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

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

์ด๋Ÿฌํ•œ ํด๋ฆฌ ํ•„์ด ์ œ์ž๋ฆฌ์— ์—†์œผ๋ฉด ๊นจ์งˆ ์ˆ˜์žˆ๋Š” ๋‹ค๋ฅธ ๊ฐ€์ ธ ์˜ค๊ธฐ๋ณด๋‹ค ์šฐ์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ polyfill์€ TextEncoder ์™€ ๊ฐ™์€ ๋” ๋งŽ์€ ๋‚œํ•ดํ•œ API๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์–ด๋–ค ์ด์œ ๋กœ ํ•„์š”ํ•œ ๊ฒฝ์šฐ polyfill์„๋กœ๋“œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด jsx ๋ณ€ํ™˜์ด์ด ๋ฌธ์ œ์˜ ์›์ธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. polyfill์„ ๊ฐ€์ ธ ์˜ค๋Š” ์ฃผ index.js ์ƒ๋‹จ์— /** <strong i="5">@jsxRuntime</strong> classic */ ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ DISABLE_NEW_JSX_TRANSFORM=true ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋น„ํ™œ์„ฑํ™”ํ•˜์‹ญ์‹œ์˜ค. ์ œ ๊ฒฝ์šฐ์—๋Š” ๋‘˜ ์ค‘ ํ•˜๋‚˜๊ฐ€์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์ƒ๊ฐ ์—” ํด๋ฆฌ ํ•„์„ ๋จผ์ € ๊ฐ€์ ธ ์˜ค๋ฉด ๋ฐ˜์‘ํ•˜๊ธฐ ์ „์—๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์‚ฝ์ž…ํ•˜๋Š” import {jsx as _jsx} from 'react/jsx-runtime'; ์ค„ ์ „์—๋กœ๋“œ ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

@msbarry ์—ฌ๊ธฐ์—์„œ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„์™€ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์šฐ๋ฆฌ๋Š”์ด ๊ฐ™์€ ๋ฌธ์ œ์— ๋ถ€๋”ช ํ˜”์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ๋งŽ์€ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ƒˆ๋กœ์šด JSX ํ˜•์‹ ( React ๋” ์ด์ƒ ๊ฐ€์ ธ์˜ฌ ํ•„์š”๊ฐ€์—†๋Š” ํ˜•์‹)์œผ๋กœ ๋ณ€ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ข‹์€ ์†Œ์‹! ์ƒˆ๋กœ์šด JSX ๊ตฌ๋ฌธ์„ ๋ชจ๋‘ ์œ ์ง€ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค!

์šฐ๋ฆฌ๋Š” 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'

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์‚ฌ๋žŒ๋“ค์ด ์ดํ•ดํ•˜์ง€ ๋ชปํ•  ๊ฒƒ์ด๊ณ  ์•„๋งˆ๋„ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์˜์›ํžˆ ๋จธ๋ฌผ๊ฒŒ ๋  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์„์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์œ ์ผํ•œ ๋‹จ์ ์€ ํŠธ๋ฆฌ ์‰์ดํ‚น์ด ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์ค„์ด์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ธ๋ฐ, ์ด๋Š” ์ฒ˜์Œ์— React 17๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•œ ์ฃผ์š” ์ด์œ  ์ค‘ ํ•˜๋‚˜์˜€์Šต๋‹ˆ๋‹ค.

FWIW๋Š” index.ts ํŒŒ์ผ์„ init.ts ๋ฐ main.tsx ํŒŒ์ผ๋กœ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ init.ts ๋ชจ๋“  ๊ด€๋ จ ํด๋ฆฌ ํ•„์„ ๊ฐ€์ ธ์˜ค๊ณ  main.tsx ๋Š” ์‹ค์ œ ์ง„์ž… ์ ์ž…๋‹ˆ๋‹ค ( React ์ฝ”๋“œ ํฌํ•จ) ๋ฐ index.ts ๋Š” ๋‘˜ ๋‹ค ์ˆœ์„œ๋Œ€๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด ํด๋ฆฌ ํ•„์ด ์ ์šฉ๋˜์–ด์•ผํ•˜๋Š” ๋ชจ๋“  ๋ชจ๋“ˆ์ด ํด๋ฆฌ ํ•„ ํ›„์—๋กœ๋“œ๋˜๊ณ  ์ด๋ฆ„ ์ง€์ •์„ ํ†ตํ•ด ๊ฐ€์ ธ ์˜ค๊ธฐ์˜ ์ž๋™ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•  ๋•Œ๋„ ํด๋ฆฌ ํ•„์ด ๊ธฐ๋ณธ ์ง„์ž… ์  ์•ž์— ์˜ค๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ์–ด๋Š ๊ฒƒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

IE11 ์˜ค๋ฅ˜

image

์˜ค๋ฅ˜๋ฅผ ํด๋ฆญํ•˜๋ฉด ์—ฌ๊ธฐ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

image

IE ๋ฒ„์ „

image

๋‹ค์Œ์€ ์žฌํ˜„ํ•˜๋Š” ์•„์ฃผ ๊ฐ„๋‹จํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

  1. npx create-react-app ie11app
  2. yarn add react-app-polyfill
  3. 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. ์ถ”๊ฐ€ ie 11 ์— browerslist ์—์„œ 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

index.js์—์„œ import 'react-app-polyfill/stable'; ๋ฅผ ์ œ๊ฑฐํ•ด๋ณด์„ธ์š”.

import 'react-app-polyfill/ie11' ๋งŒ ์žˆ์œผ๋ฉด๋ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ polyfill ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋””๋ฒ„๊ฑฐ์— ํ‘œ์‹œ๋˜๋Š” ์ฝ”๋“œ๋Š” ES5๊ฐ€ ์•„๋‹ˆ๋ฉฐ, IE11์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋น„ ๊ตฌ์กฐํ™” ๋ฐ ๊ธฐ๋ณธ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•ด๋ณด์‹ญ์‹œ์˜ค "ie >= 11" ๋‹น์‹ ์— browserslist ๋Œ€์‹  "ie 11" . ๋‘ ๊ตฌ๋ฌธ์ด ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@ Dan503 @pluma "ie >= 11" ๋ฐ import 'react-app-polyfill/stable'; ์ œ๊ฑฐ๋ฅผ ๋ชจ๋‘ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์šด์ด ์—†์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์€ ๋„ˆ๋ฌด ์นœ์ ˆํ•˜๊ณ  ์ƒˆ๋กœ์šด npx create-react-app ie11app ๋งŒ๋“ค๊ณ  ๊ทธ๊ฒƒ์ด ์‹ค์ œ๋กœ IE11์—์„œ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

์ตœ์‹  ์ •๋ณด:
"react-scripts": "^3.0.0" ๋˜ ๋Œ๋ฆฌ๋ฉด IE 11 ์—์„œ๋„ "react": "^17.0.1",
ํ•˜์ง€๋งŒ "react-scripts": "4.0.0" ์€ (๋Š”) ์—ฌ์ „ํžˆ ๋‚˜์—๊ฒŒ ์†์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ์ด๋Ÿฌํ•œ ์†”๋ฃจ์…˜ ์ค‘ ๋งŽ์€ ๊ฒƒ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž‘๋™ํ–ˆ๋˜ ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ react-scripts ์„ 3.4.4 ๋กœ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰