Next.js: HMR λΉ„ν™œμ„±ν™”

에 λ§Œλ“  2017λ…„ 02μ›” 13일  Β·  34μ½”λ©˜νŠΈ  Β·  좜처: vercel/next.js

yarn dev μ‹€ν–‰ν•  λ•Œ HMR을 λΉ„ν™œμ„±ν™”ν•˜λŠ” 방법이 κΆκΈˆν•©λ‹ˆλ‹€.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

μ‚¬λžŒλ“€μ΄ HMR에 λŒ€ν•΄ λΆˆν‰ν•œμ§€ 2년이 μ§€λ‚œ μ§€κΈˆλ„ κ³΅μ‹μ μœΌλ‘œ λΉ„ν™œμ„±ν™”ν•  수 μžˆλŠ” 방법이 μ—†λ‹€?!

λͺ¨λ“  34 λŒ“κΈ€

HMR은 항상 개발 λͺ¨λ“œμ—μ„œ μ§€μ›λ©λ‹ˆλ‹€. κ³΅μ‹μ μœΌλ‘œ λ„λŠ” 방법은 μ—†μŠ΅λ‹ˆλ‹€.
단기간에 ν•  κ³„νšμ€ μ—†μŠ΅λ‹ˆλ‹€.

이것이 μ„œλ²„μ— λΆ€ν•˜λ₯Ό μΌμœΌν‚€μ§€ μ•ŠλŠ”κ°€, μš°λ¦¬λŠ” ν”„λ‘œλ•μ…˜μ—μ„œ μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ HMR을 λ„λŠ” 방법이 ν•„μš”ν•©λ‹ˆλ‹€.

μƒμ‚°μ€‘μž…λ‹ˆλ‹€. ν”„λ‘œλ•μ…˜μ—μ„œ next build 및 next start λ˜λŠ” next build 및 NODE_ENV=production node server.js λ₯Ό μ‹€ν–‰ 쀑인지 ν™•μΈν•˜μ‹­μ‹œμ˜€.

HMR을 끄면 λ ˆμ΄μ•„μ›ƒμ—μ„œ μž‘μ—…ν•  λ•Œ μœ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. styled-components 및 일뢀 μ „μ—­ CSS μŠ€νƒ€μΌμ„ νŽΈμ§‘ν•˜κ³  μžˆμ§€λ§Œ 미리보기가 곧 κΉ¨μ§‘λ‹ˆλ‹€. κ·Έ μ΄μœ λŠ” νŽ˜μ΄μ§€μ— SSR λ Œλ”λ§ μŠ€νƒ€μΌκ³Ό 방금 μƒμ„±λœ μŠ€νƒ€μΌμ΄ ν˜Όν•©λ˜μ–΄ 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. HMR을 λ„λŠ” 것 μ™Έμ—λŠ” 이λ₯Ό 극볡할 방법이 μ—†λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

HMR이 μ—¬μ „νžˆ ES5μ™€λ§Œ ν˜Έν™˜λ˜λŠ” 것 외에도(λͺ¨λ“  μ‚¬λžŒμ΄ 더 이상 클래슀λ₯Ό νŠΈλžœμŠ€νŒŒμΌν•  ν•„μš”κ°€ μ—†μŒ), μ €λŠ” 개발 λ‹¨κ³„μ—μ„œλ§Œ λ°œμƒν•˜λŠ” ν˜Όλž€μŠ€λŸ¬μš΄ HMR κ΄€λ ¨ 버그λ₯Ό μ •κΈ°μ μœΌλ‘œ μ ‘ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λΉ„ν™œμ„±ν™”ν•˜λŠ” 방법이 있으면 정말 μ’‹κ² μŠ΅λ‹ˆλ‹€.

ν•΄ν‚Ή μ†”λ£¨μ…˜μ‘°μ°¨λ„ 감사 ν•  κ²ƒμž…λ‹ˆλ‹€. μ•…λͺ½μœΌλ‘œ λ°”λ€Œκ³  μžˆμŠ΅λ‹ˆλ‹€.

κ΄€λ ¨ λ¬Έμ œκ°€ λ°œμƒν–ˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. ν˜„μž¬ Next.js νŽ˜μ΄μ§€μ—μ„œ react-waypointλ₯Ό μ‚¬μš©ν•˜λ €κ³  ν•©λ‹ˆλ‹€. Waypoint 이벀트 ν•Έλ“€λŸ¬ λ‚΄μ—μ„œ this.setState λ₯Ό ν˜ΈμΆœν•˜λ©΄ Maximum call stack size exceeded 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. 이것은 개발 λͺ¨λ“œμ—μ„œ Next.jsλ₯Ό μ‹€ν–‰ν•  λ•Œλ§Œ λ°œμƒν•©λ‹ˆλ‹€. I npm run build 및 npm start 경우 λ¬Έμ œκ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ•„λ§ˆλ„ 이 문제 와 κ΄€λ ¨

μ–΄λ–€ μ‹μœΌλ‘œλ“  이 문제λ₯Ό λ‹€μ‹œ μ—΄ 수 μžˆμŠ΅λ‹ˆλ‹€. HMR은 μ—¬λŸ¬ μƒν™©μ—μ„œ 맀우 μ„±κ°€μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€. 이것이 μš°μ„  μˆœμœ„κ°€ μ•„λ‹Œ 경우 ν•΄λ‹Ή μ½”λ“œλ₯Ό 찾을 수 μžˆλŠ” μœ„μΉ˜μ— λŒ€ν•œ 정보λ₯Ό μ œκ³΅ν•˜κ±°λ‚˜(μˆ˜λ™μœΌλ‘œ λΉ„ν™œμ„±ν™”ν•˜κΈ° μœ„ν•΄) PR @arunodaλ₯Ό λ§Œλ“€ 수

μ§€κΈˆ μš°λ¦¬λŠ” Apollo GraphQL + Next JS(5.0.0)에 큰 문제λ₯Ό κ²ͺκ³  μžˆμŠ΅λ‹ˆλ‹€. getDataFromTreeλŠ” μž‘λ™ν•˜μ§€ μ•ŠμœΌλ©° μ΄λŠ” μ„€μ •μ—μ„œ λ§Žμ€ 뢀뢄을 κΉ¨λœ¨λ¦½λ‹ˆλ‹€.

@timneutkens , @arunoda , λ‹€μ‹œ μ—΄ 수 μžˆλ‚˜μš”?

그건 κ·Έλ ‡κ³  https://github.com/zeit/next.js/issues/1938#issuecomment -358195616

shouldComponentUpdate 에 λ¬Έμ œκ°€ μžˆλŠ” 것 μ—μ„œλŠ” ν•« λ¦¬λ‘œλ”© κΈ°λŠ₯
ν”„λ‘œλ•μ…˜ λͺ¨λ“œμ—μ„œ 둜컬둜 μ‹€ν–‰ν•˜κ³  κΈ°λŠ₯에 일뢀 λ‘œκΉ…μ„ μΆ”κ°€ν•œλ‹€κ³  λ§ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

이게 μ€‘μš”ν•œ 것 κ°™λ‹€.

λ•Œλ‘œλŠ” λΆˆν•„μš”ν•œ λ©”μ‹œμ§€ λ…Έμ΄μ¦ˆλ‘œ 개발 도ꡬ λ„€νŠΈμ›Œν¬ 탭을 μ–΄μ§€λŸ½νžˆλŠ” 것을 ν”Όν•˜κΈ° μœ„ν•΄ 개발 λͺ¨λ“œμ—μ„œ HMR을 λΉ„ν™œμ„±ν™”ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

"on-demand-entries-ping?page=/xxx" λ“±

νŽ˜μ΄μ§€λ₯Ό μƒˆλ‘œκ³ μΉ¨ν•˜κΈ° μœ„ν•΄ CMD-R을 λˆ„λ₯΄λŠ” 것은 큰 λ¬Έμ œκ°€ λ˜μ§€ μ•ŠμœΌλ©°, prod λͺ¨λ“œμ—μ„œ μ—…λ°μ΄νŠΈλ₯Ό λ°›κΈ° μœ„ν•΄ μ„œλ²„λ₯Ό λ‹€μ‹œ μ‹œμž‘ν•˜λŠ” 것은 κ³ ν†΅μŠ€λŸ½μŠ΅λ‹ˆλ‹€.

ν•΄κ²° λ°©λ²•μœΌλ‘œ 크둬 개발 λ„κ΅¬μ˜ "μš”μ²­ 차단" κΈ°λŠ₯을 μ‚¬μš©ν•˜μ—¬ hmr μš”μ²­μ„ 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.

screen shot 2018-06-08 at 14 58 25

@vanmik 쒋은 팁, κ°μ‚¬ν•©λ‹ˆλ‹€! ✨

Chrome(μ΅œμ†Œ 66)μ—μ„œ μš”μ²­ 차단을 찾으렀면 λ‹€μŒμ„ μˆ˜ν–‰ν•΄μ•Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

'DevTools μ‚¬μš©μž 지정 및 μ œμ–΄'(μ„Έλ‘œ 점 3개) > More tools > Request Blocking μ—½λ‹ˆλ‹€. 그러면 @vanmik 의 μŠ€ν¬λ¦°μƒ·κ³Ό 같이 차단할 μš”μ²­ μ†ŒμŠ€λ₯Ό 확인할 수 μžˆλŠ” μš”μ²­ 차단 μ½˜μ†”μ΄ μ—΄λ¦½λ‹ˆλ‹€.

개발 도ꡬ에 κ΅­ν•œλ˜μ§€ μ•ŠλŠ”λ‹€λŠ” 점을 μ–ΈκΈ‰ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. λΈŒλΌμš°μ € ν”ŒλŸ¬κ·ΈμΈμ„ μ‚¬μš©ν•˜μ—¬ μš”μ²­μ„ 차단할 수 μžˆμŠ΅λ‹ˆλ‹€. 이 경우 맀번 개발 도ꡬλ₯Ό μ—΄μ–΄ λ‘˜ ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ λ―Έλž˜μ—λŠ” λ‹€μŒκ³Ό 같이 κ°„λ‹¨ν•œ 것을 얻을 수 있기λ₯Ό λ°”λžλ‹ˆλ‹€.

// next.config.js
module.exports = {
  hmr: false
}

HRM은 μ§œμ¦λ‚˜. μ΄λŠ” 이점보닀 더 자주 어렀움을 κ°€μ Έμ˜΅λ‹ˆλ‹€(예: μ½”λ“œμ˜ μΌλΆ€λŠ” ν•« λ¦¬λ‘œλ“œλ˜κ³  μΌλΆ€λŠ” 그렇지 μ•Šμ•„ 일관성 μ—†λŠ” μƒνƒœλ₯Ό μœ λ°œν•˜λŠ” 경우).

@vanmik 의 팁이 μ‹€μ œ HMR μž‘μ—…μ„ μ€‘μ§€ν•˜λŠ” λ™μ•ˆ λ‚΄ 개발 μ½˜μ†”μ€ μ—¬μ „νžˆ http://localhost:3000/_next/on-demand-entries-ping?page=/xxx ν•­λͺ©μœΌλ‘œ λ³΅μž‘ν•˜μ§€λ§Œ μ§€κΈˆμ€ 였λ₯˜μž…λ‹ˆλ‹€.

디버깅에 ν—ˆμš©λ˜μ§€ μ•ŠμŒ :-/

ν™•μ‹€νžˆ κ°–κ³  μ‹Άμ–΄

// next.config.js
module.exports = {
  hmr: false
}

λˆ„κ΅°κ°€ 이것을 μœ„ν•œ ν”ŒλŸ¬κ·ΈμΈμ„ μž‘μ„±ν•  수 μžˆμ„κΉŒμš” ???

@gihrig μ½˜μ†” μ»¨ν…μŠ€νŠΈ 메뉴λ₯Ό μ‚¬μš©ν•˜μ—¬ μ΄λŸ¬ν•œ 였λ₯˜λ₯Ό 필터링할 수 μžˆμŠ΅λ‹ˆλ‹€(였λ₯˜λ₯Ό 마우슀 였λ₯Έμͺ½ λ²„νŠΌμœΌλ‘œ 클릭).

screen shot 2018-08-21 at 12 35 07

@arunoda 이것에 진전이 μžˆμŠ΅λ‹ˆκΉŒ? HMR 및 immutablejs proptypes에 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 맀우 μ‹€λ§μŠ€λŸ½μŠ΅λ‹ˆλ‹€. μ°Έμ‘°: https://github.com/facebook/prop-types/issues/221

이에 λŒ€ν•œ λ‚΄ ν•΄κ²° 방법은 request blocking λ₯Ό ν™œμ„±ν™”ν•œ λ‹€μŒ μ°¨λ‹¨λœ μš”μ²­ λͺ©λ‘μ— on-demand-entries-ping μš”μ²­μ„ μΆ”κ°€ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ €μ²˜λŸΌ HMR을 μ‹«μ–΄ν•˜μ‹œλŠ” λΆ„λ“€κ»˜ μ‘°κΈˆμ΄λ‚˜λ§ˆ 도움이 λ˜μ—ˆμœΌλ©΄ ν•©λ‹ˆλ‹€.


screen shot 2018-11-27 at 3 07 14 pm


screen shot 2018-11-27 at 3 07 50 pm

Next.js v7+μ—μ„œ HMR(Hot Module Reloading)을 λΉ„ν™œμ„±ν™”ν•˜λ €λ©΄ next.config.js νŒŒμΌμ— λ‹€μŒμ„ μΆ”κ°€ν•˜μ„Έμš”.

module.exports = {
  webpackDevMiddleware: (config) => {
    config.watchOptions = config.watchOptions || {};
    config.watchOptions.ignored = [
      // Don't watch _any_ files for changes
      /.*/,
    ];
    return config;
  },
};

μ΄λ ‡κ²Œ ν•˜λ©΄ λ³€κ²½ μ‹œ μž¬κ΅¬μΆ•μ΄ λΉ„ν™œμ„±ν™”λ˜μ–΄ λΈŒλΌμš°μ €κ°€ λ³€κ²½ 사항을 "λ³Ό" 수 μ—†μœΌλ―€λ‘œ 아무 것도 λ‹€μ‹œ λ‘œλ“œν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이것은 Next.js κ°€ λ³€κ²½ 사항에 λŒ€ν•΄ λ‹€μ‹œ μ»΄νŒŒμΌλ˜μ§€ μ•ŠμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€. λ³€κ²½ 사항이 μžˆμ„ λ•Œλ§ˆλ‹€ next.js μ„œλ²„λ₯Ό λ‹€μ‹œ μ‹œμž‘ν•œ λ‹€μŒ λΈŒλΌμš°μ €λ₯Ό μƒˆλ‘œ 고쳐야 ν•©λ‹ˆλ‹€.

λ³€κ²½ν•  λ•Œλ§ˆλ‹€ 전체 νŽ˜μ΄μ§€λ₯Ό κ°•μ œλ‘œ λ‹€μ‹œ λ‘œλ“œν•˜λŠ” μ†”λ£¨μ…˜ 은 μ•„λž˜μ˜ 이 μ„€λͺ…을 μ°Έμ‘°ν•˜μ„Έμš” .

FWIW 곧 병합: https://github.com/zeit/next.js/pull/4508

λ³€κ²½ μ‹œ 항상 νŽ˜μ΄μ§€λ₯Ό λ‹€μ‹œ λ‘œλ“œ ν•˜λŠ” μ†”λ£¨μ…˜μ˜ 경우 server.js λ§Œλ“€ 수

const next = require('next')

const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()

app.prepare().then(() => {

  // ℹ️ Below is the magic which forces a page reload on every change
  // ℹ️ From https://github.com/zeit/next.js/issues/1109#issuecomment-446841487

  // The publish function tells the client when there's a change that should be hot reloaded
  const publish = app.hotReloader.webpackHotMiddleware.publish.bind(
    app.hotReloader.webpackHotMiddleware,
  );

  // Intercept publish events so we can send something custom
  app.hotReloader.webpackHotMiddleware.publish = (event, ...rest) => {
    let forwardedEvent = event;

    // upgrade from a "change" to a "reload" event to trick the browser into reloading
    if (event.action === 'change') {
      forwardedEvent = {
        action: 'reload',
        // Only `/_document` pages will trigger a full browser refresh, so we force it here.
        data: ['/_document'],
      };
    }

    // Forward the (original or upgraded) event on to the browser
    publish(forwardedEvent, ...rest);
  };
  // ℹ️ End force page reload on change

  // ... Whatever custom server setup you have. See: https://github.com/zeit/next.js/#custom-server-and-routing
});

λ‚˜λŠ” 이것이 λ―Έλž˜μ— λ¬΄λ„ˆμ§ˆ 것이라고 80% ν™•μ‹ ν•œλ‹€.

λ”μ°ν•œ ν•΄ν‚Ήμ΄μ§€λ§Œ λΈŒλΌμš°μ € 탭이 >100% CPUλ₯Ό μ†ŒλΉ„ν•œ λ‹€μŒ ν•« μƒˆλ‘œκ³ μΉ¨ν•  λ•Œλ§ˆλ‹€ Chromeμ—μ„œ μΆ©λŒμ„ μΌμœΌν‚€λŠ” 버그λ₯Ό ν•΄κ²°ν•  수 μžˆλŠ” μœ μΌν•œ λ°©λ²•μ΄μ—ˆμŠ΅λ‹ˆλ‹€.

해킹이 쀑단될 λ•ŒκΉŒμ§€ 곡식 μ†”λ£¨μ…˜μ΄ μžˆκ±°λ‚˜ 이 λ¬Έμ œμ—μ„œ μ–ΈκΈ‰λœ 버그가 μˆ˜μ •λ˜κΈ°λ₯Ό λ°”λžλ‹ˆλ‹€ πŸ‘

HMR을 λΉ„ν™œμ„±ν™”ν•˜λ €λŠ” μ΄μœ λŠ” HMR μ—…λ°μ΄νŠΈκ°€ λ°±κ·ΈλΌμš΄λ“œμ—μ„œ 계속 λ°œμƒν•˜κΈ° λ•Œλ¬Έμ— μž…λ ₯ν•  λ•Œ DevTools/Applications/Cookies(Chrome Windows) νŒ¨λ„μ΄ 포컀슀λ₯Ό μžƒκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. webpackDevServer에 λͺ¨λ“  νŒŒμΌμ„ λ¬΄μ‹œν•˜λ„λ‘ μ§€μ‹œν•΄λ„ 이 κ²½μš°κ°€ μ•„λ‹κΉŒ μƒκ°ν•©λ‹ˆλ‹€. websocket 연결은 μ—¬μ „νžˆ β€‹β€‹λ°±κ·ΈλΌμš΄λ“œμ—μ„œ 이루어지며 μΏ ν‚€ νŒ¨λ„μ„ μŠ€λž˜μ‹±ν•˜λŠ” 것은 이 연결이라고 μƒκ°ν•©λ‹ˆλ‹€.

μš”μ : 이상적인 μ†”λ£¨μ…˜μ€ HMR을 μ™„μ „νžˆ λΉ„ν™œμ„±ν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€. 감사 ν•΄μš”!

λΆˆν–‰νžˆλ„ 이것을 next.config.js μΆ”κ°€ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

module.exports = {
  webpackDevMiddleware: config => {
    config.lazy = true;
    return config;
  },
};

이 μ˜΅μ…˜μ€ λͺ¨λ“ˆμ΄ '지연' λͺ¨λ“œμ—μ„œ μž‘λ™ν•˜λ„λ‘ μ§€μ‹œν•©λ‹ˆλ‹€. 즉, 파일이 변경될 λ•Œ λ‹€μ‹œ μ»΄νŒŒμΌν•˜μ§€ μ•Šκ³  각 μš”μ²­μ— 따라 λ‹€μ‹œ μ»΄νŒŒμΌν•©λ‹ˆλ‹€. @jesstelford 의 μ†”λ£¨μ…˜κΉŒμ§€ 가지 μ•Šκ³ λ„ 우리 쀑 λ§Žμ€ μ‚¬λžŒλ“€μ΄ 바라고 μžˆλŠ” κ²ƒμ²˜λŸΌ

좜처 : https://github.com/webpack/webpack-dev-middleware#lazy

next 7.0.2 μ—μ„œ 이것을 μ‹œλ„ν•˜λ©΄ λ‹€μŒ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

screen shot 2018-12-25 at 12 58 18 am

였늘 Create React App ν”„λ‘œμ νŠΈμ™€ ν•¨κ»˜ 일할 κΈ°νšŒκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

이 HMR 문제의 λΏŒλ¦¬λŠ” HMR이 κ΅¬ν˜„λ˜λŠ” λ°©μ‹λ§ŒνΌ μ•…ν•˜λ‹€λŠ” 것이 μ•„λ‹™λ‹ˆλ‹€.

κ°„λ‹¨νžˆ λ§ν•΄μ„œ ν΄λΌμ΄μ–ΈνŠΈκ°€ 주기적으둜 μ„œλ²„λ₯Ό ν΄λ§ν•˜λ„λ‘ ν•˜λŠ” 것은 이상적이지 μ•ŠμŠ΅λ‹ˆλ‹€.

피상적인 κ΄€μ°°μ—μ„œ CRAλŠ” 파일이 λ³€κ²½λ˜μ—ˆμ„ λ•Œλ§Œ ν΄λΌμ΄μ–ΈνŠΈμ™€ ν†΅μ‹ ν•˜λŠ” μ†ŒμΌ“ 연결을 μ‚¬μš©ν•˜κ³  ν΄λΌμ΄μ–ΈνŠΈκ°€ νŽ˜μ΄μ§€λ₯Ό λ‹€μ‹œ λ‘œλ“œν•˜λŠ” κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€. 이 κ΅¬μ„±ν‘œλ₯Ό μ‚¬μš©ν•˜λ©΄ μž‘μ—…μ΄ λ‹€μŒ 폴링 간격에 μ’…μ†λ˜μ§€ μ•ŠμœΌλ―€λ‘œ λΈŒλΌμš°μ € μƒˆλ‘œ 고침이 더 λΉ¨λΌμ§‘λ‹ˆλ‹€.

CRAλŠ” μ˜€ν”ˆ μ†ŒμŠ€ μž…λ‹ˆλ‹€. μ‹œκ°„κ³Ό 관심이 μžˆλŠ” μ‚¬λžŒμ΄ Next의 HMR을 μ—…κ·Έλ ˆμ΄λ“œν•˜μ—¬ CRA λͺ¨λΈμ„ λ”°λΌκ°ˆ 수 μžˆλ‹€λ©΄ 쒋을 κ²ƒμž…λ‹ˆλ‹€(λ¬Όλ‘  μ‰½κ²Œ λΉ„ν™œμ„±ν™”ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€ :-)

@gihrig μ‚¬λžŒλ“€μ΄ HMR을 λΉ„ν™œμ„±ν™”ν•˜λ €λŠ” λͺ‡ 가지 λ‹€λ₯Έ μ΄μœ κ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‚΄κ°€ μ΄ν•΄ν•˜λŠ” 바에 λ”°λ₯΄λ©΄ react-hot-loaderλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μž‘μ„± 방법, μƒνƒœ λͺ¨λΈλ§ 방법, μ€‘μš”ν•œ 개체 ID λΆ€μž¬μ— λŒ€ν•œ νŠΉμ • 가정이 ν•„μš”ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 가정은 일반적으둜 μ˜¬λ°”λ₯΄κ²Œ μž‘μ„±λœ redux 기반 앱에 μ μš©λ˜μ§€λ§Œ λ‹€λ₯Έ μ ‘κ·Ό 방식을 μ‚¬μš©ν•˜μ—¬ μ„€κ³„λœ μ•±μ—λŠ” μ μš©λ˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” λ¬Έμ œκ°€ HMR이 λ‚˜μ˜λ‹€λŠ” 것이 μ•„λ‹ˆλΌλŠ” 데 λ™μ˜ν•©λ‹ˆλ‹€. 단지 일반적인 도ꡬ가 μ•„λ‹ˆλΌλŠ” κ²ƒλΏμž…λ‹ˆλ‹€. 이것은 μ΄λŸ¬ν•œ λ””μžμΈ 결정에 λŒ€ν•΄ λΆˆκ°€μ§€λ‘ μ μΈ ν”„λ ˆμž„μ›Œν¬μ˜ λ§₯λ½μ—μ„œ μ•½κ°„μ˜ 뢈일치λ₯Ό λ§Œλ“­λ‹ˆλ‹€.

ν΄λ§μ—μ„œ μ›Ή μ†ŒμΌ“μœΌλ‘œ μ „ν™˜ν•˜λŠ” 것은 쒋은 생각일 수 μžˆμ§€λ§Œ 폴링은 "문제의 κ·Όλ³Έ"이 μ•„λ‹ˆκ±°λ‚˜ μ—¬κΈ° μ‚¬λžŒλ“€μ΄ μ§λ©΄ν•œ 문제 쀑 적어도 일뢀와 관련이 μ—†μŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰ 2개의 λŒ“κΈ€μ€ λͺ¨λ‘ 잘λͺ»λœ 가정을 ν•©λ‹ˆλ‹€.

  • Next.jsλŠ” react-hot-loaderλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©° λ³€κ²½ 사항이 λ°œμƒν•˜λ©΄ ꡬ성 μš”μ†Œ 트리λ₯Ό λ‹€μ‹œ λ Œλ”λ§ν•©λ‹ˆλ‹€.
  • Next.jsλŠ” λ³€κ²½ 사항을 μˆ˜μ‹ ν•˜κΈ° μœ„ν•΄ 폴링을 μˆ˜ν–‰ν•˜μ§€ μ•Šκ³ , μ–΄λ–€ νŽ˜μ΄μ§€κ°€ μ—¬μ „νžˆ 보고 μžˆλŠ”μ§€ ν‘œμ‹œν•˜κΈ° μœ„ν•΄ 폴링을 μˆ˜ν–‰ν•©λ‹ˆλ‹€. μΉ΄λ‚˜λ¦¬μ•„μ—μ„œλŠ” μ‚¬μš©μžκ°€ devtoolsμ—μ„œ λ°œμƒν•˜λŠ” 폴링을 λ³Ό 수 없도둝 μ›Ή μ†ŒμΌ“μœΌλ‘œ λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 이 HMR을 더 ν™•μž₯ν•˜λ €λ©΄ 이벀트 μ†ŒμŠ€ 연결을 μ‚¬μš©ν•˜μ—¬ μž‘λ™ν•©λ‹ˆλ‹€. 즉, μ„œλ²„κ°€ 이벀트(파일 λ³€κ²½ μ‹œ)λ₯Ό λΈŒλΌμš°μ €λ‘œ λ³΄λƒ…λ‹ˆλ‹€.

@timneutkens 정말

사싀, 이제 ES2017 λΉŒλ“œλ₯Ό devμ—μ„œ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€!

μ‚¬λžŒλ“€μ΄ HMR에 λŒ€ν•΄ λΆˆν‰ν•œμ§€ 2년이 μ§€λ‚œ μ§€κΈˆλ„ κ³΅μ‹μ μœΌλ‘œ λΉ„ν™œμ„±ν™”ν•  수 μžˆλŠ” 방법이 μ—†λ‹€?!

λ‚΄ NON next.js μ•±μ—μ„œ 이 둜그인이 GET /_next/on-demand-entries-ping?page=/인 μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

-- self-resolved: 둜거λ₯Ό 주석 μ²˜λ¦¬ν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€. app.use.(morgan(dev)) μ΄μƒν•œ 점은 Morgan이 next.jsκ°€ μ—†λŠ” λ‹€λ₯Έ 앱에 μ„€μΉ˜λ˜μ—ˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. λͺ¨κ±΄, μ™œ 이런 일이 μΌμ–΄λ‚˜λŠ”μ§€ μ•Œκ³  μ‹ΆμŠ΅λ‹ˆλ‹€. 이것은 λ‹€λ₯Έ ν”„λ‘œμ νŠΈμ— next.jsλ₯Ό μ„€μΉ˜ν•˜κΈ° μ „μ—λŠ” λ°œμƒν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

λ¬Έμ œλŠ” ν™•μ‹€νžˆ ν•΄κ²°λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

+1

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰