Как я решил ошибку webpack/chokidar — Ошибка: EBUSY: ресурс занят или заблокирован, lstat ‘C:\DumpStack.log.tmp’
… (‹project_root›\node_modules\chokidar\index.js:647:10)

После долгих поисков, от переполнения стека до проблем с github, я наконец решил эту проблему в своем проекте и решил написать об этом, чтобы помочь всем, кто может столкнуться с той же проблемой.

У меня возникла эта проблема при попытке запустить webpack-dev-server, проблема была в моем конфигурационном файле webpack, вот где я все ошибся. Вот как это выглядело:

const path = require('path');

module.exports = {
  mode: 'development',
  entry: './src/app.ts',
  output: {
    filename: 'app.js',
    path: path.resolve(__dirname, 'dist'),
    clean: true,
    publicPath: './',
  },
  devServer: {
    static: '/',
    compress: true,
    host: '0.0.0.0',
    port: 8080,
    devMiddleware: {
      index: true,
      mimeTypes: { phtml: 'text/html' },
      publicPath: './',
      serverSideRender: true,
      writeToDisk: true,
    },
  },
  // ...
}

Свойство devServer.static заставляет веб-пакет искать статические файлы по пути /, что делает chokidar (модуль, от которого зависит веб-пакет). Теперь вам может быть интересно, а что в этом плохого, ведь / — это корневой каталог моего проекта. Но / на самом деле относится к корневому каталогу моей системы, который в данном случае является каталогом C:, потому что я работаю в Windows. Затем chokidar пытается просмотреть файлы в каталоге C:, но это не удается, потому что у него нет для этого соответствующих прав доступа к файлам. Отсюда и ошибка Error: EBUSY: resource busy or locked, lstat ‘C:\DumpStack.log.tmp’

Что я сделал тогда?

Двигаясь дальше, я попытался сначала найти файл журнала C:\DumpStack.log.tmp, потому что думал, что смогу исправить это, повысив права доступа к файлу, но не смог. Затем я перезагрузил свой компьютер, тривиально, но иногда эффективно. Тем не менее, это не сработало, когда я открыл свой браузер и искал его. Я испробовал множество подходов из StackOverFlow, например: удаление каталога модулей узлов и очистку кеша npm с помощью npm cache clean перед повторным запуском npm install, но это не сработало, и даже удаление nodejs и его повторная установка. Затем я начал решать различные проблемы github, связанные с ошибкой, и, похоже, многие другие тоже сталкивались с ней из chokidar через другие пакеты или иногда с расширением кода. Наиболее важной из них была проблема с vscode-cmake-tools:



Именно это натолкнуло меня на идею, которую я использовал для ее решения. Я понял, что мне нужно указать абсолютный путь для свойства devServer.static, передав вместо него ./ . Вот исправленное — полный файл конфигурации веб-пакета:

const path = require('path');

module.exports = {
  mode: 'development',
  entry: './src/app.ts',
  output: {
    filename: 'app.js',
    path: path.resolve(__dirname, 'dist'),
    clean: true,
    publicPath: './',
  },
  devServer: {
    static: './',
    compress: true,
    host: '0.0.0.0',
    port: 8080,
    devMiddleware: {
      index: true,
      mimeTypes: { phtml: 'text/html' },
      publicPath: './',
      serverSideRender: true,
      writeToDisk: true,
    },
  },
  devtool: 'inline-source-map',
  module: {
    rules: [
      {
        test: /\.ts$/,
        use: 'ts-loader',
        exclude: /node_modules/,
      },
    ],
  },
  resolve: {
    extensions: ['.ts', '.js'],
  },
};

Спасибо за прочтение, это моя первая статья на Medium😑.