【gulp】「EBUSY: resource busy or locked, rmdir」エラーの対処法

Gulpを使用していると、時折「EBUSY: resource busy or locked, rmdir」エラーが発生することがあります。このエラーは、特定のディレクトリを削除しようとした際に、そのディレクトリやその中のファイルが他のプロセスによって使用されている場合に発生します。この記事では、このエラーの具体的な対処法について解説します。

プロセスの確認

まず、対象のディレクトリやファイルが他のプロセスによって使用されていないか確認します。Windowsの場合はタスクマネージャを、MacやLinuxの場合はlsofコマンドを使用します。

lsof +D /path/to/directory

エディタやターミナルの確認

対象のディレクトリやファイルがエディタやターミナルで開かれていないか確認します。開かれている場合は、これらを閉じてください。

gulp-watchタスクの停止

Gulpのwatchタスクを実行中の場合、一度停止してから再度実行してみてください。watchタスクがファイルをロックしている可能性があります。

キャッシュのクリア

キャッシュが原因で問題が発生している場合もあります。node_modulesディレクトリやpackage-lock.jsonファイルを削除し、再インストールを試みます。

rm -rf node_modules
rm package-lock.json
npm install

フォルダ削除のタイミングを調整

Gulpのタスクの実行タイミングに問題がある場合があります。以下のように、タスクの順序やファイルシステム操作のタイミングを調整してみてください。

const { src, dest, series } = require('gulp');
const del = require('del');

function clean() {
  return del(['path/to/directory']);
}

function build() {
  return src('src/**/*')
    .pipe(dest('dist'));
}

exports.default = series(clean, build);

OSの再起動

他の方法で問題が解決しない場合は、システムを再起動して、リソースのロックを解除することを試してみてください。

まとめ

Gulpで発生する「EBUSY: resource busy or locked, rmdir」エラーは、ディレクトリやファイルが他のプロセスによって使用されている場合に発生します。この記事で紹介した対処法を試して、エラーを解消しましょう。