Razzle: IE 11 : webpackHotDevClient๋กœ ์†์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2019๋…„ 04์›” 22์ผ  ยท  15์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: jaredpalmer/razzle

Internet Explorer 11์—์„œ ansi-styles ์˜ ํ™”์‚ดํ‘œ ๊ธฐ๋Šฅ์—์„œ ์ค‘๋‹จ๋˜๋Š” ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์š”๊ตฌ ์‚ฌํ•ญ ์ฒด์ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ansi-styles
  2. chalk
  3. react-dev-utils
  4. razzle-dev-utils

์ด๊ฒƒ์€ # 522์™€ ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ # 547์— ์˜ํ•ด ์ˆ˜์ •๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. strip-ansi & ansi-regex โ€ฆ ๊ฐ™์€ ํŒจํ‚ค์ง€๋Š” ์•„๋‹ˆ์ง€๋งŒ AFAIK์™€ ๊ด€๋ จ์ด ์žˆ๋‹ค๋Š” ์ ์— ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. chalk ์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๋‹ค์‹œ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์žฌํ˜„ํ•˜๋Š” ํŠน๋ณ„ํ•œ ๋‹จ๊ณ„๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด Razzle ์•ฑ์„ ๋งŒ๋“ค๊ณ  IE 11์—์„œ ์‹คํ–‰ ํ•ด๋ณด์„ธ์š”.

question webpack-config

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

๋‚˜๋Š” ๋ฉฐ์น  ๋™์•ˆ ์ด๊ฒƒ์„๋ณด๊ณ  ๋งˆ์นจ๋‚ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

WebpackDevServer์˜ ํด๋ผ์ด์–ธํŠธ๋ฅผ react-dev-utils / webpackHotDevClient์—์„œ webpack / hot / dev-server์˜ ๋Œ€์•ˆ์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค.

webpack.config.js ํŒŒ์ผ๋กœ ์ด๋™ํ•˜์—ฌ ๋‹ค์Œ ์ค„์„ ๊ต์ฒดํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

isEnvDevelopment && require.resolve('react-dev-utils/webpackHotDevClient'),

์ด๊ฒƒ์œผ๋กœ :

isEnvDevelopment && require.resolve('webpack/hot/dev-server'),

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

์ด์ œ create-react-app์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋” ์ด์ƒ ๋ณ„๋„์˜ ํŒจํ‚ค์ง€๋กœ ์˜ตํŠธ ์ธ ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ 

์ด์ œ v3 ์šฉ์œผ๋กœ ์—…๋ฐ์ดํŠธ ๋œ polyfill ์—

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋น„์Šทํ•œ ๊ฒƒ์ด CRA์—์„œ ์ถ”์ ๋˜๊ณ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค : https://github.com/facebook/create-react-app/issues/5336. ๊ทธ๊ฒƒ์€ Map ์ •์˜๋˜์ง€ ์•Š์€ ๊ฒƒ๊ณผ ๊ด€๋ จ์ด ์žˆ์œผ๋ฉฐ, ์ด๋Š” polyfill๋กœ ๊ณ ์ • ๊ฐ€๋Šฅํ•œ ๊ฒƒ์œผ๋กœ ์ดํ•ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

IE 9-11 ์ง€์›์— ๊ด€ํ•œ์ด ๋ชจ๋“  ๊ฒƒ์€ ํด๋ฆฌ ํ•„๋ง์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. polyfill์ด ํ™”์‚ดํ‘œ ๊ธฐ๋Šฅ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋Š” ์ด์ „ ๋ธŒ๋ผ์šฐ์ € ์šฉ์œผ๋กœ ๋ณ€ํ™˜๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ ์ข…์†์„ฑ ์ž์ฒด๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š๊ณ ๋Š” ์–ด๋–ป๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋˜ํ•œ ansi-regex , strip-ansi , ์ผ๋ถ€ ๊ธฐํƒ€ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ํŒŒ์ผ์— react-dev-utils (ํฌํ•จ formatWebpackMessages.js ๋ฐ ๊ธฐํƒ€) chalk ์— ์˜ํ•ด ์š”๊ตฌ๋˜๋Š” ํŒŒ์ผ react-dev-utils . ๋‚˜๋Š” react-dev-utils์— ์ต์ˆ™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ๋ฒ„๊ทธ์ธ์ง€ ๋˜๋Š”์ด ํ•ญ๋ชฉ์ด ๋ฒˆ๋“ค์— ํฌํ•จ๋˜์ง€ ์•Š์•„์•ผํ•˜๋Š”์ง€ ๋˜๋Š” ๋ฌด์—‡์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ํ•ด๊ฒฐํ•ด์•ผ ํ•  ๋‘ ๊ฐ€์ง€ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. Polyfill์€ ๋” ์ด์ƒ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (CRA2์—์„œ๋„ ๋™์ผ ํ•จ). Polyfill์€ Promise / Map / Set / Symbol / Object.assign / Array.isArray / String.startsWith / etc์™€ ๊ด€๋ จ๋œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. react-app-polyfill ๋ถ€ํ„ฐ ํŠน์ • ์•ฑ์— ํ•„์š”ํ•œ ํŠน์ • core-js ํด๋ฆฌ ํ•„ ์š”๊ตฌ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ๋Š” 12 ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. Babel ์ž์ฒด๊ฐ€ ์ ์ ˆํ•œ ๊ตฌ์„ฑ์œผ๋กœ ์ฝ”๋“œ์— ํ•„์š”ํ•œ core-js ํด๋ฆฌ ํ•„์„ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค (์—ฌ๊ธฐ์— ๋ฌธ์ œ๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์™œ CRA2๊ฐ€์ด ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค).

  2. ์ผ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž‘์„ฑ์ž๋Š” ๋” ์ด์ƒ ๋ชจ๋“ˆ์˜ es5 ๋ฒ„์ „ ( ansi-regex , react-dev-utils ๋“ฑ)์„ ๋ฐฐํฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. IE11์ด ๋šฑ๋šฑํ•œ ํ™”์‚ด์— ์งˆ์‹ํ•˜๋Š” ๊ฒƒ์„ ๋ณธ๋‹ค๋ฉด ์ด๊ฒƒ์€ ๋‹น์‹ ์ด ์ง๋ฉด ํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. CRA2๋Š” node_modules ( CRA2์˜ webpack conf )๋ฅผ ํ•˜์—ฌ ์ปดํŒŒ์ผํ•˜๋ ค๋Š” ํŠน์ • node_modules ๋ฅผ ์žˆ์Šต๋‹ˆ๋‹ค .

IE 11์—์„œ ์ž‘๋™ํ•˜๋„๋ก ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์‚ฌํ•ญ์„ ์—ฌ์ „ํžˆ ์–ป์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์ „์ฒด ํ”„๋กœ๋•์…˜ ๋ฒˆ๋“ค์—๋„ const ๋ฐ ํ™”์‚ดํ‘œ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ถ•์†Œ ๋œ ๋ฒˆ๋“ค์„๋ณด๊ณ  ์–ด๋–ค ๋ชจ๋“ˆ์ด ํŠธ๋žœ์Šค ํŒŒ์ผ์ด ํ•„์š”ํ•œ์ง€ ์•Œ์•„ ๋‚ด์•ผํ•ฉ๋‹ˆ๊นŒ? ์•ˆํƒ€๊น ๋„ค์š”, ๋” ์ ‘๊ทผํ•˜๊ธฐ ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด ์žˆ๋‚˜์š”?

์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•˜๋Š” ๊ฒƒ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/styleguidist/react-styleguidist/pull/1327#issuecomment -483928457

์ข€ ์งœ์ฆ๋‚˜

์•„๋ž˜์— ๋”ฐ๋ผ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
https://create-react-app.dev/docs/supported-browsers-features/#supported -browsers

์•„๋ž˜ browserlist๋กœ package.json์„ ์—…๋ฐ์ดํŠธํ•˜์—ฌ IE์—์„œ ์ž‘๋™ํ•˜๋„๋กํ•ฉ๋‹ˆ๋‹ค.

"browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all",
      "last 2 ie version"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version",
      "last 2 ie version"
    ]
  },

์ด๋ ‡๊ฒŒํ•˜๋ฉด const & arrow ํ•จ์ˆ˜์—†์ด ์ตœ์†Œํ•œ ์ฝ”๋“œ๋ฅผ ์ค€์ˆ˜ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ ํ›„ webpackHotDevClient์— ๊ฐ‡ํ˜€์„œ ์ฝ˜์†”์—์„œ ๊นจ์ง€๊ธฐ ์‹œ์ž‘ํ•˜๊ณ  ๋‹จ์„œ๋„ ์–ป์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋งŽ์€ ํ•ด๊ฒฐ์ฑ…์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ œ๊ณต๋œ ์†”๋ฃจ์…˜ ์ค‘ ์–ด๋Š ๊ฒƒ๋„ IE11 ๋˜๋Š” Edge์—์„œ ๊ฐœ๋ฐœ ์ค‘์ด ์•„๋‹™๋‹ˆ๋‹ค.
IE ๋ฒ„์ „ : 11.864.17763.0

์•„๋ž˜๋Š” ๋‚ด ํŒจํ‚ค์ง€ json ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

{
"name": "typescript_tutorial",
"๋ฒ„์ „": "0.1.0",
"private": ์ฐธ,
"์ข…์†์„ฑ": {
"@ testing-library / jest-dom": "^ 4.2.4",
"@ testing-library / react": "^ 9.4.0",
"@ testing-library / user-event": "^ 7.2.1",
"@ types / jest": "^ 24.0.25",
"@ types / node": "^ 12.12.24",
"@ types / react": "^ 16.9.17",
"@ types / react-dom": "^ 16.9.4",
"๋ฐ˜์‘": "^ 16.12.0",
"react-app-polyfill": "^ 1.0.5",
"react-dom": "^ 16.12.0",
"๋ฐ˜์‘ ์Šคํฌ๋ฆฝํŠธ": "3.3.0",
"typescript": "^ 3.7.4"
},
"์Šคํฌ๋ฆฝํŠธ": {
"start": "๋ฐ˜์‘ ์Šคํฌ๋ฆฝํŠธ ์‹œ์ž‘",
"build": "๋ฐ˜์‘ ์Šคํฌ๋ฆฝํŠธ ๋นŒ๋“œ",
"test": "๋ฐ˜์‘ ์Šคํฌ๋ฆฝํŠธ ํ…Œ์ŠคํŠธ",
"eject": "๋ฐ˜์‘ ์Šคํฌ๋ฆฝํŠธ ๊บผ๋‚ด๊ธฐ"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": {
"์ƒ์‚ฐ": [
"> 0.2 %",
"์ฃฝ์ง€ ์•Š์•˜๋‹ค",
"op_mini ๋ชจ๋‘ ์•„๋‹˜"
],
"๊ฐœ๋ฐœ": [
"> 0.2 %",
"์ฃฝ์ง€ ์•Š์•˜๋‹ค",
"op_mini ๋ชจ๋‘ ์•„๋‹˜",
"์ตœ๊ทผ 1 ๊ฐœ์˜ ํฌ๋กฌ ๋ฒ„์ „",
"์ตœ๊ทผ 1 ๊ฐœ์˜ Firefox ๋ฒ„์ „",
"์ตœ๊ทผ 1 ๊ฐœ์˜ ์‚ฌํŒŒ๋ฆฌ ๋ฒ„์ „",
"์ตœ๊ทผ 2 ๊ฐœ IE ๋ฒ„์ „"
]
},
"devDependencies": {
"eslint-config-airbnb": "^ 18.0.1",
"eslint-config-prettier": "^ 6.9.0",
"eslint-plugin-import": "^ 2.18.2",
"eslint-plugin-jsx-a11y": "^ 6.2.3",
"eslint-plugin-prettier": "^ 3.1.2",
"eslint-plugin-react": "^ 7.14.3",
"eslint-plugin-react-hooks": "^ 1.7.0",
"node-sass": "^ 4.13.0",
"์˜ˆ์œ": "^ 1.19.1"
}
}

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‚ด ์†”๋ฃจ์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค (Windows์—์„œ๋Š” ๊ฒฝ๋กœ์— \ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ Linux์—์„œ๋Š” / -์ •๊ทœ์‹์—์„œ ๊ณ ๋ ค ๋จ).

razzle.config.js :

'use strict';

// The list was taken from
// https://github.com/styleguidist/react-styleguidist/pull/1327#issuecomment-483928457
// the regex is changed to work both on Windows and Linux
const ieRule = {
    test: /\.jsx?$/,
    include: new RegExp(
        `node_modules[/|\\\\](?=(${[
            'acorn-jsx',
            'estree-walker',
            'regexpu-core',
            'unicode-match-property-ecmascript',
            'unicode-match-property-value-ecmascript',
            'react-dev-utils',
            'ansi\-styles',
            'ansi-regex',
            'chalk',
            'strip-ansi'
        ].join('|')}))`
    ),
    use: {
        loader: "babel-loader",
        options: {
            presets: [["@babel/preset-env", { targets: { ie: 11 } }]]
        }
    }
};

module.exports = {
    modify: (config, { target, dev }, webpack) => {
        // full config https://github.com/jaredpalmer/razzle/blob/master/packages/razzle/config/createConfig.js

        config.module.rules.unshift(ieRule);

        return config;
    },
};

.babelrc :

{
  "presets": [
    [
      "razzle/babel",
      {
        "targets": {
          "browsers": [
            "ie 11",
            "last 2 Chrome versions",
            "last 2 Firefox versions",
            "last 2 Safari versions"
          ]
        }
      }
    ]
  ]
}

๋˜ํ•œ IE 11์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

SecurityError
์ œ๊ณต ํ•œ ์˜ค๋ฅ˜์— ์Šคํƒ ์ถ”์ ์ด ์—†์Šต๋‹ˆ๋‹ค.
ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” SockJS! ๊ธฐ๋ณธ ์‚ฌ์ดํŠธ๋Š” '1.3.0', iframe : '1.4.0'์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์–ธ๊ธ‰ ๋œ๋Œ€๋กœ Windows ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ํŽธ์ง‘ํ•˜์—ฌ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
https://stackoverflow.com/questions/52549799/securityerror-on-ie11-when-initializing-websocket

์ฆ‰ ๋‚ด๊ฐ€ ๋งŒ๋“ 

HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
   SOFTWARE
      Microsoft
         Internet Explorer
            Main
               FeatureControl
                  FEATURE_WEBSOCKET_MAXCONNECTIONSPERSERVER
                     iexplore.exe = (DWORD) 0x0000014 (20)

ํŽ˜์ด์ง€ ๋‹น ํ—ˆ์šฉ๋˜๋Š” ์›น ์†Œ์ผ“ ์ˆ˜๋ฅผ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ ํ›„ ๋ฌธ์ œ๊ฐ€ ๋œ ์ž์ฃผ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค (๊ฑฐ์˜ ๋ถˆํŽธ ํ•จ์—†์ด ๋””๋ฒ„๊ทธํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€๋งŒ ๋‹ค์‹œ ๋‚˜ํƒ€๋‚˜๋ฉด ๋‹ค๋ฅธ ํƒญ์„ ์—ด๊ณ  ํ˜„์žฌ ํƒญ์„ ๋‹ซ์•„์•ผํ•ฉ๋‹ˆ๋‹ค).

๋‚˜๋Š” ๋ฉฐ์น  ๋™์•ˆ ์ด๊ฒƒ์„๋ณด๊ณ  ๋งˆ์นจ๋‚ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

WebpackDevServer์˜ ํด๋ผ์ด์–ธํŠธ๋ฅผ react-dev-utils / webpackHotDevClient์—์„œ webpack / hot / dev-server์˜ ๋Œ€์•ˆ์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค.

webpack.config.js ํŒŒ์ผ๋กœ ์ด๋™ํ•˜์—ฌ ๋‹ค์Œ ์ค„์„ ๊ต์ฒดํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

isEnvDevelopment && require.resolve('react-dev-utils/webpackHotDevClient'),

์ด๊ฒƒ์œผ๋กœ :

isEnvDevelopment && require.resolve('webpack/hot/dev-server'),

@ a1g0rithm ์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•ฉ๋‹ˆ๋‹ค.

@ a1g0rithm webpack.config.js๋ฅผ ์–ด๋””์„œ ์ฐพ์•˜์Šต๋‹ˆ๊นŒ?

@ a1g0rithm์—์„œ ์ œ๊ณต ํ•˜๋Š” ๋„์›€ ์ด ๋œ ์œ ์ผํ•œ ์†”๋ฃจ์…˜ ์ž…๋‹ˆ๋‹ค. webpack.dev.config ํŒŒ์ผ์—๋Š” ๋‹ค์Œ ๋ฉ”์‹œ์ง€๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

entry: [
    // ...
    // Note: instead of the default WebpackDevServer client, we use a custom one
    // to bring better experience for Create React App users. You can replace
    // the line below with these two lines if you prefer the stock client:
    // require.resolve('webpack-dev-server/client') + '?/',
    // require.resolve('webpack/hot/dev-server'),
    require.resolve('react-dev-utils/webpackHotDevClient'),

์ฒ˜์Œ ๋‘ require.resolve ์˜ ์ฃผ์„ ์ฒ˜๋ฆฌ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋งˆ์ง€๋ง‰ ์ฃผ์„์€ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜์‹ญ์‹œ์˜ค.

require.resolve('webpack-dev-server/client') + '?/',
require.resolve('webpack/hot/dev-server'),
// require.resolve('react-dev-utils/webpackHotDevClient'),

๋‚˜๋Š” ์ด๊ฒƒ์ด ๊ฐœ๋ฐœ์ค‘์ธ ํด๋ผ์ด์–ธํŠธ ์›นํŒฉ์„ ๊ฐ€์ ธ์˜จ ๋‚˜์œ ๊ฐ€์ ธ ์˜ค๊ธฐ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. v4์—์„œ ์ˆ˜์ • ๋จ

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