Laravelで「node::ResetStdio(): Assertion `(err) != (-1)' failed.」のエラーが発生


はじめに

Laravelのフロントエンドの実装をしていたら「npm run watch」を実行してもブラウザ側でCSSの変更が反映されなくなった。
「npm run watch」実行中に「Ctrl + C」コマンドで中止すると、ターミナルに以下のエラーが発生。

$ node[34624]: ../src/node.cc:649:void node::ResetStdio(): Assertion `(err) != (-1)' failed.
 1: 0x10007643b node::Abort() [/Users/name/.nodebrew/current/bin/node]
 2: 0x1000761e3 node::AppendExceptionLine(node::Environment*, v8::Local<v8::Value>, v8::Local<v8::Message>, node::ErrorHandlingMode) [/Users/name/.nodebrew/current/bin/node]
 3: 0x1000541a9 node::ResetStdio() [/Users/name/.nodebrew/current/bin/node]
 4: 0x7fff51001ef4 __cxa_finalize_ranges [/usr/lib/system/libsystem_c.dylib]
 5: 0x7fff510021fe exit [/usr/lib/system/libsystem_c.dylib]
 6: 0x100039326 node::Environment::stop_sub_worker_contexts() [/Users/name/.nodebrew/current/bin/node]
 7: 0x1001f2214 v8::internal::FunctionCallbackArguments::Call(v8::internal::CallHandlerInfo) [/Users/name/.nodebrew/current/bin/node]
 8: 0x1001f1831 v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<false>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::FunctionTemplateInfo>, v8::internal::Handle<v8::internal::Object>, v8::internal::BuiltinArguments) [/Users/name/.nodebrew/current/bin/node]
 9: 0x1001f0ec0 v8::internal::Builtin_Impl_HandleApiCall(v8::internal::BuiltinArguments, v8::internal::Isolate*) [/Users/name/.nodebrew/current/bin/node]
10: 0x10090d739 Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit [/Users/name/.nodebrew/current/bin/node]

この記事は上記のエラーを解決し、CSSを反映するまでの方法について書いたものです。

バージョンと実行状況

  • Laravel v5.8.29
  • Node.js v12.5.0

Docker環境で、npmコマンドなどはMacOS上で実行していた。
今回のエラーもMacOSのみでしか発生しないものらしい。
流れとしては、csccファイル変更→「npm run watch」で都度反映 という形で行なっていた。

原因

どこかのタイミングでNode.jsのバージョンが上がったことが原因。
情けないことにいつ何をしてバージョンアップしたのかが不明。
どうやらNode.jsのv12.5.0で対象のエラーが出るらしい。

エラーについての参考資料

https://github.com/nodejs/node/issues/28479
上記記事を参考に試したこと。

  • npm i nativesコマンドの実行
  • 「node_modules」「package-lock.json」を削除後のnpm install

しかしどれもエラーの解決には至らず...

https://github.com/nodejs/node/issues/20325
上記のやり取りを確認し、Node.jsのバージョンが原因と発覚。
個人的な開発なので、Node.jsのバージョンを固定にしていたわけでもなかったので、Node.jsのバージョンをダウングレードすることに。

nvmを使ってNode.jsのバージョンをダウングレード

https://qiita.com/strsk/items/925644e124efcc964625
上記記事を参考にし、Node.jsをダウングレード
(ダウングレードというよりは、バージョンの切り替え?)

nvmのインストール

$ git clone git://github.com/creationix/nvm.git ~/.nvm
$ source ~/.nvm/nvm.sh

インストール可能なNode.jsのバージョンを確認

$ nvm ls-remote

Node.jsのバージョンを指定してインストール

$ nvm install 12.4.0

v12.5.0v12.4.0にダウングレード

使用するバージョンを切り替える

$ nvm use 12.4.

変更の確認

$ node -v
v12.4.0

エラーの確認

エラーが発生した手順を試す。
「npm run watch」実行→「Ctrl + C」でストップ。

見事にエラーが解決!!

やはりNode.jsがv12.5.0だったことが原因らしい。

補足

CSSが反映されない問題はこの時点でまだ解決せず。
以下に解決した方法をまとめた記事を書いたので、キャッシュ問題に悩んでいる方は参考までにご覧ください。
Laravelにてキャッシュが原因でCSSの変更が反映されない問題