gulp3.9.1から最新のgulp4.0に上げた時の記録


割と移行が大変でした。
nodeやnpm周りをそこまでがっつり触っていない方は(自分も含め)
余裕のある時に作業したほうがいいかもです。

まず現状の確認をします。

インストールしたosはcentos7です。

version.shell
[vagrant@localhost example]$ gulp -v
[00:54:27] CLI version 3.9.1
[00:54:27] Local version 3.9.1
[vagrant@localhost example]$ node -v
v6.12.3
[vagrant@localhost example]$ npm -v
3.10.10

【参考ページ】
https://qiita.com/tonkotsuboy_com/items/9ab83fe0f25cf0b010f3

nodeのバージョン管理ツールがなかったのでインストール。
検索したところnvm,n,nodebrewなどがあり
知名度の個人的印象とgithubのスター数からnvmを採用

環境周りのインストール

◆nvmのインストール
https://qiita.com/ysti/items/0c79d0d5e998e5861be2

nvm.shell
[vagrant@localhost example]$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
/usr/lib
├── [email protected]
=> If you wish to uninstall them at a later point (or re-install them under your
=> `nvm` Nodes), you can remove them from the system Node as follows:

     $ nvm use system
     $ npm uninstall -g a_module

グローバルのgulpをアンインストールできます
というのが出た。今回はもう使わないので
ローカルディレクトリ、グローバル共にアンインストールする。

gulp.shell

[vagrant@localhost example]$ gulp -v
[01:35:21] CLI version 3.9.1
[01:35:21] Local version 3.9.1
[vagrant@localhost example]$ npm uninstall gulp --save-dev #ローカルアンインストール
[vagrant@localhost example]$ sudo npm uninstall -g gulp #グローバルアンインストール

nvmを使えるように設定。(再起動でもいけるらしいです)

source.shell

source ~/.bashrc

nvmの安定板をインストール

nvm.shell

nvm install stable

nodeのバージョンが上がっていれば成功

node.shell

node -v

再起動しても最新の安定板nodejsを使用するという指定

nvm.shell

nvm alias default stable

ここでいよいよGulp4のインストールですが
package.jsonが残っていて中にgulp3の記述があると
再び3がインストールされるのでご注意ください。
私の場合はすでに動いている別プロジェクトがあったので
そこのpackage.jsonをコピーしてからインストールコマンドを打ちました。
もしくは明示的に指定しても良いかもしれません。

package.json

{
  "dependencies": {
    "gulp": "^4.0.2",
  }
}

プロジェクトのディレクトリに移動して

gulp.shell

npm install --save-dev gulp
# npm install --save-dev gulp@next
# ↑こちら2020年2月1日現在使えませんでした。

プロジェクトフォルダにインストールしたgulpを使用するには下記コマンドを使用
なおnpxはnpmのバージョン5以上で使えるパッケージ管理や実行に使えるコマンド。
gulpをグローバルにインストールせず実行する際などに使用できるとのこと。
(最近の流れではグローバルにインストールしないとのことを
今回の作業でたくさん目にしました。)

npx.shell

npx gulp -v
npx gulp (タスク名)

個人的に使用しているプラグインをインストール

バグが起こった際に内容を把握しやすくするため一つずつ実行

gulp-babel babel-core babel-preset-envをインストール

gulp-babel.shell

[vagrant@localhost example]$ npm i -D gulp-babel babel-core babel-preset-env
npm WARN [email protected] No description
npm WARN [email protected] No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

+ [email protected]
+ [email protected]
+ [email protected]
added 94 packages from 24 contributors and audited 6605 packages in 25.896s
found 0 vulnerabilities

gulp-clean-cssをインストール

gulp-clean-css.shell

[vagrant@localhost example]$ npm i -D gulp-clean-css
npm WARN [email protected] No description
npm WARN [email protected] No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

+ [email protected]
added 2 packages from 2 contributors and audited 6631 packages in 6.391s
found 0 vulnerabilities

gulp-combine-media-queriesをインストール

gulp-combine-media-queries.shell

[vagrant@localhost example]$ npm i -D gulp-combine-media-queries
npm WARN deprecated [email protected]: gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
npm WARN [email protected] No description
npm WARN [email protected] No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

+ [email protected]
added 59 packages from 23 contributors and audited 6809 packages in 17.248s
found 0 vulnerabilities

gulp-concatをインストール

gulp-concat.shell

[vagrant@localhost example]$ npm i -D gulp-concat
npm WARN [email protected] No description
npm WARN [email protected] No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

+ [email protected]
added 3 packages from 38 contributors and audited 6841 packages in 5.981s
found 0 vulnerabilities

gulp-headerをインストール

gulp-header.shell
[vagrant@localhost example]$ npm i -D gulp-header
npm WARN [email protected] No description
npm WARN [email protected] No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

+ [email protected]
added 4 packages from 9 contributors and audited 6859 packages in 6.808s
found 0 vulnerabilities

gulp-imageminをインストール

gulp-imagemin.shell

[vagrant@localhost example]$ npm i -D gulp-imagemin
npm WARN deprecated [email protected]: gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5

> [email protected] postinstall /var/www/html/wp-content/themes/example/node_modules/gifsicle
> node lib/install.js

  ✔ gifsicle pre-build test passed successfully

> [email protected] postinstall /var/www/html/wp-content/themes/example/node_modules/jpegtran-bin
> node lib/install.js

  ✔ jpegtran pre-build test passed successfully

> [email protected] postinstall /var/www/html/wp-content/themes/example/node_modules/optipng-bin
> node lib/install.js

  ✔ optipng pre-build test passed successfully
npm WARN [email protected] No description
npm WARN [email protected] No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

+ [email protected]
added 334 packages from 134 contributors and audited 15284 packages in 42.625s
found 6 moderate severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details

gulp-plumberをインストール

gulp-plumber.shell

[vagrant@localhost example]$ npm i -D gulp-plumber
npm WARN [email protected] No description
npm WARN [email protected] No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

+ [email protected]
added 7 packages from 2 contributors and audited 15320 packages in 9.104s
found 6 moderate severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details

gulp-sassインストール

gulp-sass.shell

[vagrant@localhost example]$ npm i -D gulp-sass

> [email protected] install /var/www/html/wp-content/themes/example/node_modules/node-sass
> node scripts/install.js

Downloading binary from https://github.com/sass/node-sass/releases/download/v4.9.0/linux-x64-64_binding.node
Download complete  ] - :
Binary saved to /var/www/html/wp-content/themes/example/node_modules/node-sass/vendor/linux-x64-64/binding.node
Caching binary to /home/vagrant/.npm/node-sass/4.9.0/linux-x64-64_binding.node

> [email protected] postinstall /var/www/html/wp-content/themes/example/node_modules/node-sass
> node scripts/build.js

Binary found at /var/www/html/wp-content/themes/example/node_modules/node-sass/vendor/linux-x64-64/binding.node
Testing binary
Binary is fine
npm WARN [email protected] No description
npm WARN [email protected] No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

+ [email protected]
added 92 packages from 111 contributors and audited 15915 packages in 63.094s
found 16 moderate severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details

[vagrant@localhost example]$ npm audit fix
npm WARN [email protected] No description
npm WARN [email protected] No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

added 9 packages from 7 contributors, updated 4 packages and moved 1 package in 8.67s
fixed 5 of 16 vulnerabilities in 15915 scanned packages
  11 vulnerabilities required manual review and could not be updated

gulp-uglifyをインストール

gulp-uglify.shell

[vagrant@localhost example]$ npm i -D gulp-uglify
npm WARN [email protected] No description
npm WARN [email protected] No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

+ [email protected]
added 6 packages from 41 contributors and audited 15930 packages in 10.026s
found 15 moderate severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details
[vagrant@localhost example]$ npm audit fix
npm WARN [email protected] No description
npm WARN [email protected] No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

up to date in 6.038s
fixed 0 of 15 vulnerabilities in 15930 scanned packages
  15 vulnerabilities required manual review and could not be updated
[vagrant@localhost example]$

gulp-postcssをインストール

gulp-postcss.shell

[vagrant@localhost example]$ npm i -D gulp-postcss
npm WARN [email protected] No description
npm WARN [email protected] No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

+ [email protected]
added 19 packages from 50 contributors and audited 16005 packages in 10.549s
found 15 moderate severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details
[vagrant@localhost example]$ npm audit fix
npm WARN [email protected] No description
npm WARN [email protected] No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

up to date in 6.175s
fixed 0 of 15 vulnerabilities in 16005 scanned packages
  15 vulnerabilities required manual review and could not be updated

gulp-webserver

gulpwebserver.shell

[vagrant@localhost example]$ npm i -D gulp-webserver
npm WARN [email protected] No description
npm WARN [email protected] No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

+ [email protected]
added 57 packages from 53 contributors and audited 16259 packages in 17.566s
found 17 vulnerabilities (1 low, 15 moderate, 1 critical)
  run `npm audit fix` to fix them, or `npm audit` for details
[vagrant@localhost example]$ npm audit fix
npm WARN [email protected] No description
npm WARN [email protected] No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

up to date in 6.718s
fixed 0 of 17 vulnerabilities in 16259 scanned packages
  17 vulnerabilities required manual review and could not be updated

deprecatedなプラグイン

gulp-uncss → gulp-postcss
gulp-minify-css → gulp-clean-css
gulp-util → 依存関連が複雑なので単純な置き換えではなく歴史的な問題ということでスルー

インストール時のバグについて

bug.shell
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected]

というバグで検索
https://github.com/Unitech/pm2/issues/3676
https://shimz.me/blog/node-js/4123
https://qiita.com/MasamotoMiyata/items/0fdad60d80687fb01909

結局MAC関連のバグということで今回はスルーしました。
●gulp-imageminインストール時のバグ

bug.shell
found 6 moderate severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details

npm auditというのはpackageのセキュリティをチェックしてくれるものとのこと
https://blog.kazu69.net/2018/05/14/package_security_aware_with_npm_audit_added_npm_v6/
似たような方の状況があったので参考にさせていただきつつ
https://qiita.com/Stein/items/6f39ec971302d64e056d
対応として以下を実行してみる

npm.shell

[vagrant@localhost example]$ npm audit fix
npm WARN [email protected] No description
npm WARN [email protected] No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

up to date in 6.097s
fixed 0 of 6 vulnerabilities in 15284 scanned packages
  6 vulnerabilities required manual review and could not be updated

手動でレビューしてくださいとのことだが
やり方がわからず、作業している余裕もなく今回はスルー。

gulp3から4で変わったこと

1.プロジェクトディレクトリのルートにpackage-lock.jsonという新たなファイルが追加されていた。役割としてはより厳密にプラグインの依存関係を保ったままインストールしたりちょっとしたバージョン管理もできるっぽい。
>gulp本家サイトに解説があります。(英語です)

2.node_modulesディレクトリに展開されるファイルも以前は
node_modules
┗gulp
 ┗node_modules
  ┗archy
  ┗interpret
などとなっていたものが
node_modules
┗archy
┗interpret
となりgulpをインストールしただけで大量のディレクトリが
node_modulesディレクトリ直下に展開されるようになっていた。
今回の作業の背景としてgulp3.9.1で最初設定をしたところ
このディレクトリ直下展開が行われたため4を試したところ
同様の展開が行われた。

gulp3から4に上げてgulpfilejsの書き方で怒られるようになったもの

『Did you forget to signal async completion?』

こんなエラーが出たらメソッドチェーンの先頭にreturnを追加しましょう。

error.js

gulp.task('img', function() {
    gulp.src('./images/*.gif')
        .pipe(imagemin())
        .pipe(gulp.dest('./dist/images'));
});

OK.js

gulp.task('img', function() {
    return gulp.src('./images/*.gif')
        .pipe(imagemin())
        .pipe(gulp.dest('./dist/images'));
});

『AssertionError: Task function must be specified』

これはgulp4になってから複数のタスク呼び出しの書き方が変わったため出ているものです。

error.js

gulp.task('default', ['task1', 'task2'], function(){
    // defaultタスクの実行内容
});

ok.js
gulp.task('default', gulp.series('task1', 'task2', function(){
    // defaultタスクの実行内容
}));

ここで一つハマったことをさらします

以下のように実行するとエラーメッセージが表示されることなく
Finished 'ampcmq' after 208 ms
などと実行結果が表示されるが
gulp.destで吐き出されるはずのファイルが吐き出されないという状況になった。
割とわかりにくいエラーだったのでメモしておきます。

okbuterror.js
gulp.task('default', gulp.series('task1', 'task2'), function(){
    // defaultタスクの実行内容
});

またgulp.watchの引数も指定方法が変わったようで
以下のエラーが出ました。
『watch task has to be a function (optionally generated by using gulp.parallel or gulp.series)』

error.js

gulp.task('watch', function() {
    gulp.watch('./sass/**/*.scss',['sass2']);
});

ok.js
gulp.task('watch', function() {
    gulp.watch('./sass/**/*.scss', gulp.task('sass2'));
});

感想

自分のケースではnodeのバージョンが上がったので必然的にgulpも上げた感じで
特にこれまでと動作的に変わったという部分はまだ実感しておりませんが
package-lock.jsonができていたりと改善されている感じはします。