Next.js: HMRを無効にする

䜜成日 2017幎02月13日  Â·  34コメント  Â·  ゜ヌス: vercel/next.js

yarn devを実行するずきにHMRを無効にするにはどうすればよいでしょうか。

最も参考になるコメント

2幎間HMRに぀いお䞍平を蚀った埌、それを無効にする公匏の方法はただありたせんか!!

党おのコメント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を開発モヌドで実行しおいる堎合にのみ発生したす。 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モヌドで曎新を取埗するのは面倒です。

回避策ずしお、Chrome開発ツヌルの「リク゚ストブロック」機胜を䜿甚しお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のプロパティタむプに問題がありたす-非垞にむラむラしたす。 参照 https 

それに察する私の回避策は、 request blockingを有効にしおから、ブロックされたリク゚ストのリストにon-demand-entries-pingリク゚ストを远加するこず


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


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

Next.js v7 +でホットモゞュヌルリロヌドHMRを無効にするには、これを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が倉曎時に再コンパむルされないこずを意味

倉曎のたびにペヌゞ党䜓を匷制的に再読み蟌みする゜リュヌションに぀いおは、以䞋のコメントを参照しおください。

FWIWはこれをすぐにマヌゞしたす //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接続は匕き続きバックグラりンドで行われ、Cookieパネルをスラッシングしおいるのはこの接続であるず私は信じおいたす。

芁点理想的な゜リュヌションでは、HMRを完党に無効にする必芁がありたす。 ありがずう

残念ながら、これをnext.config.js远加するこずはできたせん。

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

このオプションは、モゞュヌルに「レむゞヌ」モヌドで動䜜するように指瀺したす。぀たり、ファむルが倉曎されたずきに再コンパむルされるのではなく、芁求ごずに再コンパむルされたす。 @jesstelfordの゜リュヌションたで行かなくおも、私たちの倚くが望んでいるこずのように

゜ヌス https 

next 7.0.2でこれを詊しおみるず、次の゚ラヌが発生したす。

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

今日、Create ReactAppプロゞェクトで䜜業する機䌚がありたした。

このHMRの問題の根本は、HMRが実装されおいる方法ほど悪であるずいうこずではないず思いたす。

簡単に蚀えば、クラむアントがサヌバヌを定期的にポヌリングするこずは理想的ずは蚀えたせん。

ざっず芳察するず、CRAは、ファむルが倉曎されたずきにのみクラむアントず通信する゜ケット接続を䜿甚しおいるように芋えたす。その埌、クラむアントはペヌゞをリロヌドしたす。 このスキヌムでは、操䜜が次のポヌリング間隔に䟝存しないため、ブラりザヌの曎新も高速になりたす。

CRAはオヌプン゜ヌスです。 時間ず関心のある人がNextのHMRをアップグレヌドしおCRAモデルに埓うこずができれば玠晎らしいず思いたすもちろん、簡単に無効にするこずもできたす:-)

@gihrig人々がHMRを無効にしようずしおいる理由はおそらくいく぀かありたす。

私の理解では、react-hot-loaderには、アプリケヌションの䜜成方法、状態のモデル化方法、および重芁なオブゞェクトIDの欠劂に぀いお保持するための特定の仮定が必芁です。 これらの仮定は通垞、正しく蚘述されたreduxベヌスのアプリには圓おはたりたすが、他のアプロヌチを䜿甚しお蚭蚈されたアプリには圓おはたらない堎合がありたす。 問題はHMRが悪であるずいうこずではなく、䞀般的なツヌルではないずいうこずだけに同意したす。 これにより、これらの蚭蚈䞊の決定にずらわれないフレヌムワヌクのコンテキストで䞍協和音が発生したす。

ポヌリングからWebSocketに切り替えるこずはおそらく良い考えですが、ポヌリングは「問題の根本」ではなく、むしろここで人々が遭遇した問題の少なくずもいく぀かずは無関係です。

最埌の2぀のコメントはどちらも間違った仮定をしおいるこずに泚意しおください。

  • Next.jsはreact-hot-loaderを䜿甚せず、倉曎が発行されたずきにコンポヌネントツリヌを再レンダリングしたす
  • Next.jsは、倉曎を受け取るためのポヌリングを行いたせん。ただ衚瀺されおいるペヌゞをマヌクするためのポヌリングを行いたす。カナリアでは、devtoolsでポヌリングが行われおいるこずをナヌザヌに衚瀺しないように、これがWebSocketに倉曎されたした。 このHMRをさらに拡匵するには、むベント゜ヌス接続を䜿甚したす。぀たり、サヌバヌはファむルの倉曎時にむベントをブラりザヌに送信したす。

@timneutkens聞いお

実際、ES2017ビルドを開発で実行できるようになりたした

2幎間HMRに぀いお䞍平を蚀った埌、それを無効にする公匏の方法はただありたせんか!!

このlogginがNONnext.jsアプリで/ _next / on-demand-entries-pingpage = /を取埗するのはなぜですか

-自己解決ロガヌapp.useをコメントアりトする必芁がありたした。morgandev奇劙なこずに、Morganはnext.jsのない別のアプリにむンストヌルされおいるため、これがログに蚘録されお䜕かが起こっおいたす。モヌガン、なぜこれが起こっおいるのか知りたい。 これは、next.jsを別のプロゞェクトにむンストヌルする前は発生しおいたせんでした。

問題を再床開いおください。問題は完党に解決されおいたせん。

+1

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡