Laravelで開発中にPCが頻繁にフリーズするという問題にぶち辺り、原因がnpm run watch-pollだということが解ったので、その解決方法をまとめておきます。
複雑な原因でもなく大きな問題にもならなかったのですが、これが原因でデータ破損となれば困るので、同じような問題に直面した開発者向けです。
npm run watch-pollについて
$ npm run watch-poll
Javascriptやcss(scss)をコンパイルする際に、開発中であればnpm run watch(またはwatch-poll)で監視状態にして開発しますが、これが結構CPUへ負荷をかけてしまい、性能低めや複数アプリを同時起動していればフリーズすることもあります。
※実際に画面真っ黒になって何度も再起動を強いられました・・・
npm run watch-pollすれば、アセットファイルを監視して変更が加わればコンパイルして返してくれますよね。初期状態であれば、この監視は1秒間隔です。
監視時間を変更
解決方法は、監視の間隔を長くすることです。リアルタイムで確認をするとしても、1秒単位で監視してもらう必要は正直ないので、せめて5〜10秒程度に設定しておくと良いでしょう。
監視時間の設定はpackage.jsonへ追記します。
"scripts": {
"dev": "npm run development",
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "npm run development -- --watch",
"watch-poll": "npm run watch -- --watch-poll",
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
"prod": "npm run production",
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
},
scriptsの中にwatch-pollがあるので、ここに時間を設定します。
"watch-poll": "npm run watch -- --watch-poll=10000",
=10000で間隔を10秒にしました。単位はミリ秒なので、5秒で設定したい人は=5000としてください。
これで、npm run watch-pollを再起動させれば10秒感覚でチェックしてくれるようになります。
フリーズした際の対処法
もしnpm run watch-poll中にフリーズしたり、黒画面になった場合は10分程度時間を置いてみてください。
USBケーブルなどが刺さっていれば、放電させるためにも外せるものは一旦すべて外しておきましょう。
※ノートPCの場合は電源コードも抜きましょう
10分程度放置すれば、ファンの音も落ち着いてきます。それで復旧すれば良いですが、もしそのまま動かないのであれば再起動をします。
PC自体古くなっていたり、そこそこ使い込んでいればHDD破損の危険性も出てくるので、できるだけ負荷をかけないように、現在行われている処理がある程度完了するまでは待ってみてください。画面に反映されていなくても、内部では処理を実行している可能性は考えられるので、急いでいたとしても最低10分は待つことです。
まとめ
今回は「npm run watch-poll中にPCがフリーズした時の対処法」について、監視時間設定を変更する方法をご紹介しました。
開発ではPCのメンテナンスはもちろん、負荷をかけないように心がけることが大切ですので、焦らず原因を突き止め対応するようにしましょう。