Node.js 0.10.x 0.11.x環境において gulp-useminのバージョンアップにご注意

2015.08.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

好物はインフラとフロントエンドのかじわらゆたかです。 フロントのビルドを実施する際にgulp-useminを用いてJSやCSSを結合したりするケースがあるかと思います。

本日(2015/08/28)アプリケーションのデプロイでgulpのタスクが通らなくなったとの報告を受けたので、 その原因と対策を紹介します。

原因

以下のコミットでPromiseをQというライブラリを用いる方法から、 NativeのPromiseを用いる方法に変更が入っています。 Used native Promise · zont/gulp-usemin@175d6d7

以前の私の記事にも書いている通り、PromiseがNativeでサポートされるのはNode.js 0.12.xからになります。

AWS Lambdaファンクションを開発するときはNode.jsのバージョンにご注意を | Developers.IO

そのため、上記の変更が反映されたgulp-useminを用いると当該の箇所でエラーとなってしまいます。

エラーが発生した際のスタックトレース

ReferenceError: Promise is not defined
at /Users/KAJIWARAYutaka/Project/ErrorSample/node_modules/gulp-usemin/lib/htmlBuilder.js:20:16
at Array.map (native)
at module.exports (/Users/KAJIWARAYutaka/Project/ErrorSample/node_modules/gulp-usemin/lib/htmlBuilder.js:19:25)
at Transform._transform (/Users/KAJIWARAYutaka/Project/ErrorSample/node_modules/gulp-usemin/index.js:17:9)
at Transform._read (/Users/KAJIWARAYutaka/Project/ErrorSample/node_modules/gulp-usemin/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js:184:10)
at Transform._write (/Users/KAJIWARAYutaka/Project/ErrorSample/node_modules/gulp-usemin/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js:172:12)
at doWrite (/Users/KAJIWARAYutaka/Project/ErrorSample/node_modules/gulp-usemin/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:237:10)
at writeOrBuffer (/Users/KAJIWARAYutaka/Project/ErrorSample/node_modules/gulp-usemin/node_modules/throug

対策

今回の対策としては3点あります。

  • Node.js を 0.12.xを用いる
  • package.json内のgulp-useminのバージョンを固定する
  • 時を待つ

Node.js を 0.12.xを用いる

Node.jsのバージョンを更新できる場合、Node.jsを 0.12.系に更新する事で問題なくgulp-useminのタスクは実行されます。

package.json内のgulp-useminのバージョンを固定する

gulp-useminを動かしていたpackage.json内の記載は以下のようになっていたかと思われます。

package.json

(省略)
"gulp-usemin": "^0.3.11",
(省略)

この記載だとパッチの更新は受け入れるといった記載のため、 今回の障害が発生した0.3.13ができようされることになります。 ですので、以下のように記載する事で0.3.12を用いる事で対応できます。

package.json

(省略)
"gulp-usemin": "0.3.12",
(省略)

時を待つ

当該の現象についてはGithubのIssue上にも取り上げられています。 Breaking change in 0.3.13 (for Node.js 0.10.x / 0.11.x) · Issue #136 · zont/gulp-usemin

まだ、議論等はそこまでされてはおりませんが、良いようになってくれる事を願います。

最後に

この記事がデプロイ担当者の平穏なデプロイの一助になる事を願います。