Ещё с самых первый версий Windows, длина пути не может иметь более 260 символов, как говорится by design. Около года назад в репозитории corefx (это ядро .NET) был открыт вопрос поддержки длинных путей, в котором начался хоть какой-то прогресс. Однако, о поддержке путей с длиной более 260 символов пока что можно забыть.

Почему я решил поговорить на эту тему? Да потому что недавно стали появляться вопросы на тостере, а также других сайтах и сообществах, в которых пользователи попросту не могли удалить директорию node_modules. Печально, да? Вот несколько способов, позволяющих сделать это.

Вариант 0. Total Commander

Если вы используете Total Commander в своей повседневной жизни, то скорее всего эта проблема обошла вас стороной. Дело в том, что за последние два года я ни разу не встречался с озвученной ранее проблемой. Просто нажимаете комбинацию клавиш Shift + Del — всё, директория удалена.

Вариант 1. Пишем скрипт на JavaScript

Хех, тот скрипт, что вы видите ниже мне пришлось включить в Yellfy (тогда ещё RWK) из-за того, что мои коллеги не могли удалить законченные проекты. Забавно, да?

var fs = require('fs');

function recursiveDeleteFolder(filepath) {
  if (fs.existsSync(filepath)) {
    var files = fs.readdirSync(filepath);
    files.forEach(function(filename) {
      var curPath = path.join(filepath, filename);
      if (fs.lstatSync(curPath).isDirectory()) {
        recursiveDeleteFolder(curPath);
      } else {
        fs.unlinkSync(curPath);
      }
    });
    fs.rmdirSync(filepath);
  }
};

recursiveDeleteFolder('node_modules/');

Просто создайте рядом с директорией node_modules js-файл и запустите его из под Node.js.

Вариант 2. rimraf

Любой пакет Node.js может спокойно работать с путями, длина которых более 260 символов, в Windows. Например, самый популярный пакет для удаления файлов называется rimraf.

Устанавливаем этот пакет глобально и натравливаем его на необходимую директорию:

$ npm i -g rimraf
$ cd /path/to/project
$ rimraf node_modules

Вариант 3. flatten-packages

Специально для страдальцев был разработан пакет, перекидывающий все вложенные зависимости в корневую директорию. Вариант использования всё тот же:

$ npm i -g flatten-packages
$ cd /path/to/project
$ flatten-packages

Этот метод не удаляет директорию node_modules, а просто делает её плоской, после чего вы можете спокойно удалить её даже через проводник.

Вариант 4. Использовать npm@3

Начиная с третьей версии, npm переходит на новую систему хранения зависимостей. С первого взгляда она очень похожа на систему, используемую в Bower, но это немного не то.

Теперь все зависимости перед установкой проверяются на наличие одинаковых версий пакетов и в итоге складываются в корень директории node_modules. Если используются пакеты, версии которых различны, то они устанавливаются в директорию того пакета, что использует специфичную версию.

Для того, чтобы обновиться до нового npm, нужно либо установить Node.js 5-ой версии, либо воспользоваться специальной утилитой для этого.

Таким образом, о проблеме работы с длинными путями в Windows можно забыть.