Ещё с самых первый версий 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 можно забыть.