Próbowałem uruchomić webpack --watch
i po edycji moich plików JS nie powoduje to automatycznej rekompilacji.
Próbowałem ponownie zainstalować webpack
za pomocą, npm uninstall
ale nadal nie działa.
Jakieś pomysły?
Odpowiedzi:
FYI: wygląda na to, że OS X może spowodować uszkodzenie folderu i nie wysyłać go fsevents
(którego używa watchpack
/ chokidar
/ Finder) dla siebie i jakichkolwiek folderów podrzędnych. Nie jestem pewien, co ci się przydarzyło, ale było to bardzo frustrujące dla mnie i dla kolegi.
Udało nam się zmienić nazwę uszkodzonego folderu nadrzędnego, a następnie natychmiast obserwować, jak zdarzenia przebiegały zgodnie z oczekiwaniami. Zobacz ten post na blogu, aby uzyskać więcej informacji: http://feedback.livereload.com/knowledgebase/articles/86239-os-x-fsevents-bug-may-prevent-monitoring-of-certai
Zalecane poprawki z powyższego linku to:
Pierwsze dwa nie zadziałały, nie wypróbowały sugestii Spotlight, a odtworzenie nie okazało się konieczne.
Udało nam się znaleźć główny folder problemów, otwierając Findera i tworząc pliki w każdym kolejnym folderze nadrzędnym, aż jeden z nich pojawił się natychmiast (ponieważ Finder również zostanie złapany przez ten błąd). Przyczyną jest folder główny, który nie jest aktualizowany. Po prostu zrobiliśmy mv
to i mv
przywróciliśmy jego pierwotną nazwę, a następnie obserwator zadziałał.
Nie mam pojęcia, co powoduje uszkodzenie, ale cieszę się, że mam poprawkę.
watchify
, żaden z kroków nie działał ze mną, więc ostatecznie użyłem argumentu ankiety. Wiele osób przekazuje ankietę argumentując ją do browserify zamiast watchify. Mój kod wygląda następująco:watchify(browserify(config.src,{}), {poll:100});
npm install
jak i zmiana nazwy katalogu są bardzo intensywnymi operacjami w sposobie implementacji klienta synchronizacji.
Jeśli kod nie jest ponownie kompilowany, spróbuj zwiększyć liczbę obserwatorów (w Ubuntu):
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
sudo sysctl -p
nie działa na Mavericks. Jakieś nowe pomysły?
ModuleConcatenationPlugin
. Pominięcie ModuleConcatenationPlugin
umożliwia kontynuację oglądania.
/etc/sysctl.conf
? Zmiana wzgl. ustalanie tej pary klucz-wartość? (Jeśli nie możesz znaleźć polecenia do zastosowania ad-hoc ( sysctl -p
), cóż, to jest to pojedynczy restart i powinieneś być dobry ...)
sudo sysctl -a | grep max_user_watches
Dodanie następującego kodu do pliku konfiguracyjnego mojego pakietu webpacka rozwiązało problem. Nie zapomnij zignorować folderu node_modules, ponieważ mogłoby to zabić wydajność dla HMR (Hot Module Replace):
watchOptions: {
poll: true,
ignored: /node_modules/
}
watch: true
może również działać. Polling to ciągłe sprawdzanie innych programów lub urządzeń przez jeden program lub urządzenie w celu sprawdzenia, w jakim są stanie, zwykle w celu sprawdzenia, czy są nadal połączone lub czy chcą się komunikować. Więc ustawienie poll: true
pozwala webpackowi sprawdzić stan twojego programu, aby zobaczyć, czy zostały wprowadzone jakiekolwiek zmiany, lub przynajmniej to, co przypuszczam, dzieje się.
Miałem ten problem podczas pracy z WebStormem.
Wyłączenie ustawień -> Ustawienia systemu -> „bezpieczny zapis” rozwiązało problem za mnie.
Zalecenia można znaleźć w: Rozwiązywanie problemów z pakietem WebPack
Aby dodać do możliwych rozwiązań: miałem folder projektu w folderze Dropbox, więc przeniesienie go rozwiązało problem za mnie. (OS X)
Moim problemem było rozróżnianie wielkości liter w folderach. Moje wywołania kodu do require () miały wszystkie nazwy ścieżek pisane małymi literami, ALE w rzeczywistości katalogi miały w sobie wielką literę. Zmieniłem nazwy wszystkich moich katalogów na małe litery, a oglądanie w sieci Web działało natychmiast.
Jednym z problemów jest to, że jeśli twoje nazwy ścieżek nie są absolutne, takie rzeczy się zdarzają. Ja przypadkowo ustawić resolve.root
aby ./
zamiast __dirname
i to spowodowało mi tracić czasu kasowania i ponownego tworzenia plików, takich jak faceci powyżej mnie.
Jeśli zmiana fs.inotify.max_user_watches zgodnie ze wskazówkami Césara nadal nie działa, spróbuj użyć odpytywania zamiast natywnych obserwatorów, tworząc skrypt, jak pokazano w dokumentacji lub uruchamiając pakiet internetowy z --watch --watch-poll
opcjami.
Zwróć uwagę, że jeśli uruchomisz pakiet WebPack na maszynie wirtualnej (Vagrant / Virtualbox) i zmienisz pliki na platformie hosta, aktualizacje plików w folderze współdzielonym mogą nie wywołać powiadomienia w systemie Ubuntu. Spowoduje to, że zmiany nie zostaną odebrane przez pakiet internetowy.
widzieć: bilet do Virtualbox nr 10660
W moim przypadku edycja i zapisanie pliku na de guest (in vi) wyzwoliło webpack. Edycja go na hoście (w PhpStorm, Notatniku lub jakiejkolwiek innej aplikacji) NIE uruchamia webpacka, cokolwiek zrobiłem.
Rozwiązałem to za pomocą vagrant-fsnotify .
vagrant-notify-forwarder
do bardziej magicznego przeładowania
vagrant plugin install vagrant-notify-forwarder
zrobiłem dla mnie trwałe rozwiązanie
Pracuj dla mnie w Laravel Homestead
--watch --watch-poll
Aktualizacje: usunięcie całego katalogu i ponowne klonowanie gita z repozytorium rozwiązuje mój problem.
Jeśli używasz Vima, powinieneś spróbować ustawić backupcopy na yes zamiast domyślnego auto. W przeciwnym razie Vim czasami zmienia nazwę oryginalnego pliku i tworzy nowy, co będzie zepsuło z zegarkiem webpack:
https://github.com/webpack/webpack/issues/781
Po prostu dodaj to do swoich ustawień Vima, jeśli tak jest:
set backupcopy = yes
Miałem ten sam problem z plikiem .vue. Po ponownym uruchomieniu serwera wszystko działało dobrze, ale przy następnym zapisie nie był już rekompilowany. Problem dotyczył ścieżki pliku importu, w której jedna litera była wielka. Bardzo trudno zrozumieć ten problem, ponieważ wszystko działa po ponownym uruchomieniu serwera. Sprawdź przypadek swoich ścieżek.
Nie było to dla mnie rekompilacji, ale wtedy zdałem sobie sprawę / przypomniałem sobie, że webpack obserwuje wykres zależności, a nie tylko folder (lub pliki). Z pewnością pliki, które zmieniałem, nie były jeszcze częścią tego wykresu.
Dla mnie problemem było tworzenie folderów i plików w VS Code. Aby to naprawić, ponownie sklonowałem moje repozytorium i tym razem utworzyłem nowe foldery i pliki za pomocą wiersza poleceń zamiast kodu. Myślę, że kod z jakiegoś powodu uszkadzał pliki. Widziałem, że aplikacja została właśnie zaktualizowana, więc może to nowy błąd.
Miałem podobny problem, ani webpack, ani rollup w trybie zegarka nie łapały wprowadzonych przeze mnie zmian. Dowiedziałem się, że to w zasadzie moja wina, ponieważ zmieniałem moduł (plik .tsx), który nie był jeszcze zaimportowany w aplikacji (na przykład App.ts, który jest punktem wejścia) i spodziewałem się, że narzędzia do kompilacji zgłaszają błędy. wykonane tam.
Sposób, w jaki rozwiązałem ten problem, polegał na znalezieniu błędu dotyczącego wielkich liter w ścieżce importu. Folder w systemie plików miał pierwszą małą literę, ścieżka importu była wielka. Wszystko skompilowane dobrze, więc był to tylko problem z zegarem z pakietem internetowym.
Wystąpił również ten problem w maszynie wirtualnej VirtualBox (5.2.18) Ubuntu (18.04) używającej Vagrant (2.1.15) z synchronizacją rsync. Nagle pierwsza kompilacja działa świetnie, ale Webpack nie bierze pod uwagę późniejszych zmian, nawet z fs.inotify.max_user_watches=524288
setem. Dodawaniepoll: true
konfiguracji Webpacka też nie pomogło.
Tylko vagrant-notify-forwarder
zadziałało (vagrant-fsnotify nie zadziałało z jakiegoś powodu), ale potem odbudowa nastąpiła zbyt szybko po zapisaniu pliku na hoście i przypuszczam, że rsync nie miał wystarczająco dużo czasu, aby zakończyć swoje zadanie (może ze względu na ilość synchronizowanych katalogów w moim pliku Vagrantfile?).
Wreszcie aggregateTimeout
sprawiłem, że zegarek znów działał, zwiększając również konfigurację mojego Webpacka:
module.exports = {
watch: true,
watchOptions: {
aggregateTimeout: 10000
},
...
}
Jeśli to rozwiązanie działa dla Ciebie, spróbuj ponownie obniżyć tę wartość, w przeciwnym razie będziesz musiał poczekać 10 sekund, aż kompilacja uruchomi się ponownie za każdym razem, gdy klikniesz Zapisz. Wartość domyślna to 300 ms .
Wygląda na to, że wartość: max_user_watches
w /proc/sys/fs/inotify/max_user_watches
ma wpływ na pakiet
Aby sprawdzić rzeczywistą wartość
$cat /proc/sys/fs/inotify/max_user_watches
16384
16384 było w moim przypadku i nadal to nie wystarczało.
Próbowałem różnych rozwiązań, takich jak:
$ echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p
Ale wydaje się, że nawet gdybym zmienił wartość, po ponownym uruchomieniu komputera wróciłby do domyślnego 16384.
Utwórz plik:
sudo nano /etc/sysctl.d/90-override.conf
I wypełnij go:
fs.inotify.max_user_watches=200000
Wydaje mi się, że 200000 mi wystarczy.
Po utworzeniu pliku i dodaniu wartości po prostu uruchom ponownie komputer i wszystko powinno być w porządku.
Dla mnie usunięcie node_modules
i wykonanie instalacji npm lub przędzy ponownie, aby zainstalować wszystkie pakiety, rozwiązało problem
Prostym rozwiązaniem na MacOS jest:
Otwórz dwa okna terminala w tym samym katalogu, w którym znajduje się Twój projekt.
W pierwszym oknie terminala uruchom: webpack --watch
W drugim terminalu windows uruchom: webpack-dev-server
Wypróbowałem wiele możliwych rozwiązań i wydaje się, że jest to najbardziej niezawodne
webpack --watch
kompiluje projekt i zapisuje pliki na dysku, co odpowiada uruchomieniu webpack
po każdym zapisie. webpack-dev-server
to narzędzie programistyczne, które kompiluje się do pamięci i udostępnia zawartość jako usługę za pośrednictwem protokołu http. W każdym razie Twoja sugestia nie jest rozwiązaniem, ponieważ skompilowane pliki nie zostaną zapisane na dysku, o ile webpack --watch
nie będą działać zgodnie z reklamą.
Po wypróbowaniu kilku strategii rozwiązania tego problemu po prostu się poddałem, ale podczas rozwiązywania innego problemu spróbowałem ponownie i nagle --watch
flaga wreszcie działała.
Szczerze mówiąc nie wiem, co konkretnie sprawiło, że to zadziałało, ale po wykonaniu następujących kroków po prostu zaczęło działać:
1. Install most recent gcc version
$ sudo port install gcc48
$ sudo port select --set gcc mp-gcc48
2. Install most recent clang version
$ sudo port install clang-3.6
$ sudo port select --set clang mp-clang-3.6
3. Export variables holding the patch to C and C++ compiler
$ export CC=/opt/local/bin/clang
$ export CXX=/opt/local/bin/clang++
Mogło się zdarzyć, że podczas instalacji tych pakietów jakaś zależność właśnie dodała brakujący element układanki, kto wie ...
Mam nadzieję, że pomoże to każdemu, kto ma problemy z działaniem.
Dodam kolejną odpowiedź, ponieważ uważam, że jest to jak dotąd najlepsze rozwiązanie. Używam go codziennie i działa! Po prostu zainstaluj tę bibliotekę:
https://github.com/gajus/write-file-webpack-plugin
Opis: wymusza na programie webpack-dev-server zapisywanie plików pakietu w systemie plików.
Jak zainstalować :
npm install write-file-webpack-plugin --save-dev
Jeśli zdarzyło się to nagle w Twoim projekcie, może to rozwiązać problem.
Może w jakiś sposób pliki, które śledziły zmiany w Twoim projekcie, których szukał webpack, zostały uszkodzone. Możesz je utworzyć ponownie, wykonując proste czynności.
Natknąłem się na to pytanie, gdy miałem podobny problem - okazało się, że webpack nie jest ponownie pakowany, nawet podczas uruchamiania webpacka --config.
Usunąłem nawet plik bundle.js, a strona nadal wyświetlała się tak, jak przed moimi edycjami.
Dla tych z Was, którzy mają ten sam problem, w końcu zrobiłem opcję `` opróżnij pamięć podręczną i twarde przeładowanie '' w Chrome (kliknij prawym przyciskiem myszy przycisk ponownego ładowania przy otwartych narzędziach dev) i to wystarczyło
Wystąpił problem z rozróżnieniem między plikami .js i .ts. Czemu ?
Podczas kompilacji projektu program Visual Studio kompiluje pliki maszynopisu do plików .js i .js.map. Jest to całkowicie zbędne, ponieważ pakiet webpack obsługuje również pliki maszynopisu (z awesome-typescript-loader). Podczas edycji plików .tsx komponentów w programie Visual Studio Code lub z wyłączoną funkcją compileOnSave opcją w tsconfig.json, edytowany plik ts nie jest ponownie kompilowany, a mój pakiet sieciowy przetwarzał nieaktualny plik .js.
Rozwiązaniem było wyłączenie kompilowania plików maszynopisu w Visual Studio podczas kompilacji projektu. Dodaj
<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
w PropertyGroup twojego .csproj.