Help us understand the problem. What is going on with this article?

Node 10.0.0でgulpクラッシュ

More than 1 year has passed since last update.

起きた問題

MacBook ProのメンテナンスのついでにNode.jsのバージョンアップを行ったところ、旧環境で実行できていたgulpが下記のようにクラッシュして正常に動作しなくなってしまいました。

gulp[28017]: ../src/node_contextify.cc:631:static void node::contextify::ContextifyScript::New(const FunctionCallbackInfo<v8::Value> &): Assertion `args[1]->IsString()' failed.
 1: node::Abort() [/Users/yokokoujiyoshihito/.nodebrew/current/bin/node]
 2: node::InternalCallbackScope::~InternalCallbackScope() [/Users/yokokoujiyoshihito/.nodebrew/current/bin/node]
 3: node::contextify::ContextifyScript::New(v8::FunctionCallbackInfo<v8::Value> const&) [/Users/yokokoujiyoshihito/.nodebrew/current/bin/node]
 4: v8::internal::FunctionCallbackArguments::Call(v8::internal::CallHandlerInfo*) [/Users/yokokoujiyoshihito/.nodebrew/current/bin/node]
 5: v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<true>(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/yokokoujiyoshihito/.nodebrew/current/bin/node]
 6: v8::internal::Builtin_Impl_HandleApiCall(v8::internal::BuiltinArguments, v8::internal::Isolate*) [/Users/yokokoujiyoshihito/.nodebrew/current/bin/node]
 7: 0x8ad5688427d
 8: 0x8ad5688f755
 9: 0x8ad5690bc20
10: 0x8ad568944f7
11: 0x8ad568944f7
Abort trap: 6

環境

  • macOS High Sierra 10.13.4
  • node.js 10.0.0
  • nodebrew 8.9.4
  • npm 6.0.1
  • gulp 3.9.1

解決

プロジェクトフォルダ内のnode_modulesフォルダとpackage-lock.jsonを削除してから、npm installを実行します。

原因

不用意にOSのバージョンを上げたりnodeのバージョンを上げてしまったことが問題かと考え、旧環境に戻すことを検討していましたが、
(※幸いiMacも並行使用していたため、同一環境は残っていました。)
調べてみると下記のようにGitでも問題が上がっていました。

上段のページのコメントに答えがありました。

Find natives@^1.1.0 in your lock file
Change it to natives@^1.1.3

nativesのバージョンが古いことが原因でした。
package-lock.jsonを新旧で比較してみたところ、

    "natives": {
      "version": "1.1.1",
      "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.1.tgz",
      "integrity": "sha512-8eRaxn8u/4wN8tGkhlc2cgwwvOLMLUMUn4IYTexMgWd+LyUDfeXVkk2ygQR0hvIHbJQXgHujia3ieUUDwNGkEA==",
      "dev": true
    },
    "natives": {
      "version": "1.1.3",
      "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.3.tgz",
      "integrity": "sha512-BZGSYV4YOLxzoTK73l0/s/0sH9l8SHs2ocReMH1f8JYSh5FUWu4ZrKCpJdRkWXV6HFR/pZDz7bwWOVAY07q77g==",
      "dev": true
    },

このようにバージョンが上がっていました。
これを見つけるために時間がかかりましたが、無事解決してgulpも起動するようになりました。

未解決

gulpのクラッシュは解決しましたが、原因を探る過程で下記のような相違点が見つかりました。

"graceful-fs": {
  "version": "3.0.11",
  "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz",
  "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=",
  "dev": true,
  "requires": {
    "natives": "^1.1.3"
  }
}
"graceful-fs": {
  "version": "3.0.11",
  "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz",
  "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=",
  "dev": true,
  "requires": {
    "natives": "^1.1.0"
  }
}

nativesの推奨バージョンが新旧で異なっています。
今のところ全体は問題なく動いていますので、別の機会に探ってみたいと思います。

補足

Dropboxでプロジェクトフォルダをそのまま同期して複数台で環境を共有しているため、旧環境を引き継ぐことを優先していました。
とはいえ、スッキリと新しい環境にしたかったこともあり削除 → 再インストールを試しましたが、原因を探ってみることで仕組みも理解できてきたので、エラーから学ぶことも多いと実感しています。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした