Ситуация
Я хочу использовать gulp и связанные цепочки интерфейсных инструментов в средах разработки, размещенных в Windows. Я упираюсь в стену, пытаясь использовать подключаемые модули gulp, такие как Browser-Sync, потому что граф папок node_modules раздувается, делая пути к файлам Windows слишком длинными для копирования файлов. Я хотел бы прагматичный подход к решению этой проблемы прямо сейчас в Windows, независимо от того, что сообщество Node может или не может предоставить для улучшения удобства использования npm в Windows в будущем.
2 вопроса
Есть ли рабочий процесс npm для Windows, который работает именно так, как задумано? "запустить команду и установить файлы" (например, сравнимо с npm в OSX, npm в Linux, ruby gems или даже nuget) Я не хочу возиться с кучей ручного редактирования файлов, символических ссылок и т. д. каждый раз, когда я использую npm в Windows.
Существует ли хорошо документированный и стабильный рабочий процесс Cygwin для выполнения npm и узлов, позволяющий обойти ограничения пути к файлам Windows API?
Кровавые подробности перечислены ниже ...
Общая проблема
- Выполнение установки npm из стандартной командной строки Windows завершается ошибкой в глубоко вложенных иерархиях node_modules.
- Согласно потоку репозитория Joyent на github, это общепризнанная проблема, не имеющая приемлемых решений для разработчиков в средах, ориентированных на Windows. ( Правда? )
- Ядро NT поддерживает длину пути к файлу до 32 767 символов.
- MAXPATH Windows API ограничен 260 символами.
- Windows API обрабатывает файловые операции для всех основных оболочек Windows и еще много чего, включая: Explorer, CMD, Powershell, MYSgit bash и т. Д. ( MS, правда? Как давно NTFS существует? )
- Cygwin поддерживает длинные пути к файлам, но npm.cmd не работает "из коробки" из-за форматирования crlf. Я попробовал преобразование DOS2Unix в npm, чтобы заставить его работать с Cygwin, но, похоже, с этим есть другие проблемы.
Мой текущий взлом
- Создайте папку «n» в качестве промежуточной области в корне C: \, потому что это сокращает путь к моей папке.
- Запустите npm в папке "n", чтобы установить все необходимые модули.
- Запустите Cygwin и используйте cp, чтобы скопировать папку node_modules в целевой проект.
- Промыть и повторить, когда зависимости изменяются или когда мне нужно запустить новый проект.
Другие неприятные обходные пути
Символические ссылки можно использовать для сокращения путей к файлам, но это бесполезные уловки. По мере роста экосистемы npm вложенные цепочки зависимостей станут слишком длинными, и этот обходной путь станет непригодным для использования.
Добавление ВСЕХ зависимостей в файл package.json корневой папки упоминалось в одном потоке, с которым я столкнулся. Хотя такой подход сгладит структуру папок и предотвратит загрузку дублирующих модулей, этот обходной путь кажется неестественным. Это также убивает удобство использования, надежность и производительность npm, потому что вам придется возиться с файлами и папками после установки либо вручную, либо с помощью некоторых хакерских скриптов. Этот подход также подвержен той же участи, что и подход символических ссылок.