Sytuacja
Chcę używać gulp i powiązanych łańcuchów narzędzi front-end w środowiskach programistycznych hostowanych przez system Windows. Uderzam w ścianę, próbując użyć wtyczek gulp, takich jak Browser-Sync, ponieważ wykres folderu node_modules rozszerza się, przez co ścieżki plików systemu Windows są zbyt długie, aby skopiować pliki. Chciałbym mieć pragmatyczne podejście do rozwiązywania tego problemu teraz w systemie Windows, niezależnie od tego, co społeczność Node może zapewnić lub nie, aby poprawić użyteczność npm w systemie Windows w przyszłości.
2 pytania
Czy istnieje przepływ pracy npm dla systemu Windows, który działa tak, jak powinien? „uruchom polecenie i zainstaluj pliki” (np. porównywalne z npm na OSX, npm na Linuksie, ruby gems lub nawet nuget) Nie chcę bawić się kilkoma ręcznymi edycjami plików, linkami symbolicznymi itp. za każdym razem, gdy używam npm w systemie Windows.
Czy istnieje dobrze udokumentowany, stabilny przepływ pracy Cygwin dla wykonywania npm i węzłów w celu obejścia ograniczeń ścieżek do plików interfejsu API systemu Windows?
Krwawe szczegóły wymienione poniżej ...
Ogólny problem
- Uruchamianie instalacji npm ze standardowego wiersza polecenia systemu Windows kończy się niepowodzeniem w przypadku głęboko zagnieżdżonych hierarchii modułów node_modules.
- Według wątku repozytorium Joyent na github, jest to uznany problem, bez łatwych do zaakceptowania obejść dla programistów w środowiskach skoncentrowanych na systemie Windows. ( Naprawdę? )
- Jądro NT obsługuje ścieżki do plików o długości do 32767 znaków.
- Wartość MAXPATH interfejsu Windows API jest ograniczona do 260 znaków.
- Windows API obsługuje operacje na plikach dla wszystkich głównych powłok Windows i nie tylko: Explorer, CMD, Powershell, MYSgit bash itp. ( MS naprawdę? Jak długo istnieje NTFS? )
- Cygwin obsługuje długie ścieżki plików, ale npm.cmd nie działa po wyjęciu z pudełka z powodu formatowania crlf. Wypróbowałem transformację DOS2Unix na npm, aby działała z Cygwin, ale wydaje się, że są z tym inne problemy.
Mój obecny hack
- Utwórz folder „n” jako obszar przemieszczania w katalogu głównym C: \, ponieważ skraca to ścieżkę do folderu.
- Uruchom npm w folderze „n”, aby zainstalować moduły na wszystko, czego potrzebuję.
- Uruchom Cygwin i użyj cp, aby skopiować folder node_modules do projektu docelowego.
- Wypłucz i powtórz, gdy zmieniają się zależności lub gdy muszę uruchomić nowy projekt.
Inne niesmaczne obejścia
Łącza symboliczne mogą służyć do skracania ścieżek plików, ale są to nieznośne hacki. Wraz z rozwojem ekosystemu npm zagnieżdżone łańcuchy zależności staną się zbyt długie i to obejście stanie się bezużyteczne.
Dodanie WSZYSTKICH zależności do pliku package.json folderu głównego było wspomniane w jednym wątku, z którym się spotkałem. Chociaż takie podejście spowoduje spłaszczenie struktury folderów i zapobiegnie ładowaniu zduplikowanych modułów, to obejście wydaje się nienaturalne. Zabija również użyteczność, trwałość i produktywność npm, ponieważ musisz bawić się plikami i folderami po instalacji ręcznie lub za pomocą niektórych hackerskich skryptów. Podejście to jest również narażone na taki sam los, jaki może ostatecznie ponieść podejście linków symbolicznych.