webpack --watch не компілює змінені файли


95

Я спробував запустити, webpack --watchі після редагування своїх файлів JS це не викликає автоматичної перекомпіляції.

Я спробував перевстановити webpackuse, npm uninstallале він все ще не працює.

Якісь ідеї?

Відповіді:


72

FYI: здається , OS X може мати папку зіпсована і більше не посилу fsevents(який watchpack/chokidar / Finder використовує) для себе та будь-яких дочірніх папок. Я не можу бути впевнений, що це те, що трапилося з вами, але це дуже засмучувало мене і колегу.

Нам вдалося перейменувати пошкоджену батьківську папку, а потім спостерігати за подіями, які негайно пройшли, як очікувалося. Дивіться цю публікацію в блозі для отримання додаткової інформації: http://feedback.livereload.com/knowledgebase/articles/86239-os-x-fsevents-bug-may-prevent-monitoring-of-certai

Рекомендовані виправлення з наведеного вище посилання:

  • перезавантаження комп'ютера
  • перевірка диска та відновлення дозволів за допомогою Disk Utility
  • додавання папки до списку конфіденційності Spotlight (список папок не індексується), а потім видалення з неї, ефективно примушуючи переосмислювати
  • перейменування папки, а потім, можливо, перейменування назад
  • повторне створення папки та переміщення старого вмісту назад у неї

Перші два не працювали для нас, не випробовували пропозицію Spotlight, і повторне створення не виявилося необхідним.

Нам вдалося знайти кореневу папку проблеми, відкривши Finder і створивши файли в кожній наступній батьківській папці, доки одна не з’явилася одразу (оскільки Finder також буде вражений цією помилкою). Виною тому є сама коренева папка, яка не оновлюється. Ми просто mvзробили це і mvповернули йому початкову назву, а потім спостерігач запрацював.

Не уявляю, що спричиняє корупцію, але я просто радий виправити це.


3
Я перейменував свою папку ~ / Sites на щось інше, а потім повернувся в ~ / Sites, і це виправило помилку. Він також виправив кілька інших помилок в інших проектах. Розмова про вбивство 2 птахів 1 каменем. Дуже дякую!!!
Кірк

Я зіткнувся з цією проблемою під час роботи watchify, жоден крок не працював зі мною, тому в підсумку я використав опитування arg. Багато людей проходять опитування щодо опитування, щоб переглядати їх, а не спостерігати. Мій код виглядає так:watchify(browserify(config.src,{}), {poll:100});
Айман

1
Не впевнений на 100%, що це причина, але вимкнення мого клієнта синхронізації Dropbox під час спроби запустити watchify спрацювало для мене. Як запуск, npm installтак і перейменування каталогу - це дуже інтенсивні операції способом реалізації клієнта синхронізації.
jez

Перезапуск у мене спрацював у Linux, у мене виникла проблема з webpack-dev-сервером, після годин спроб з’ясувати, чому це працювало вчора, а сьогодні не ...
DomA

1
З 2017 року ця відповідь все ще рятувала мене від пекла! Думав, що конфігурація мого веб-пакету весь час помиляється!
iamjc015

88

Якщо ваш код не перекомпілюється, спробуйте збільшити кількість спостерігачів (в Ubuntu):

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

Джерело: https://webpack.github.io/docs/troubleshooting.html


sudo sysctl -pне працює на Mavericks. Якісь нові ідеї?
Simon H

Поточна проблема з Webpack 3 іModuleConcatenationPlugin . Опускання ModuleConcatenationPluginдозволяє продовжувати перегляд.
kross

@SimonH намагався дивитись і змінюватись /etc/sysctl.confбезпосередньо? Зміна відповідно встановлення цього ключа-значення? (Якщо ви не можете знайти команду застосувати ad-hoc ( sysctl -p), то це одноразова перезавантаження, і ви повинні бути добре ...)
Френк Ноке

4
Я рекомендую перевірити кількість годин перед тим, щоб переконатися, що вона не була збільшена (даючи уявлення, якщо це може призвести до проблеми): тобтоsudo sysctl -a | grep max_user_watches
Френк Ноке

Це вирішило мою проблему під час запуску chroot (Ubuntu) на Chromebook
Філ Д.

40

Додавання наступного коду до мого конфігураційного файлу webpack вирішило проблему для мене, сподіваюся, це допоможе. Не забудьте проігнорувати папку node_modules, оскільки це призведе до зниження продуктивності HMR (гаряча заміна модуля):

watchOptions: {
  poll: true,
  ignored: /node_modules/
}

1
Веб-пакет @Lokesh може переглядати файли та перекомпілювати їх, коли вони змінюються. Режим перегляду вимкнено за замовчуванням, тому він watch: trueможе також працювати. Опитування - це безперервна перевірка однією програмою чи пристроєм інших програм чи пристроїв, щоб побачити, в якому вони стані, як правило, чи вони все ще зв’язані чи хочуть спілкуватися. Таким чином, налаштування poll: trueдозволяють webpack перевіряти стан вашої програми, щоб побачити, чи були внесені якісь зміни, або, принаймні, те, що, як я припускаю, відбувається.
CoderBriggs

Посилання на документи: pollВаріант визначається годинником
Matthias

після перейменування та перезавантаження це зробило для мене фокус (osx). кудо!
Елад Кац

26

У мене була ця проблема під час роботи з WebStorm.

Вимкнення налаштувань -> Налаштування системи -> "безпечний запис" це вирішило для мене.

Знайшов рекомендацію робити це у: Усунення несправностей WebPack


1
Дякую! Насправді не було очевидно, що проблема в PhpStorm!
Сергій Захарченко

14

Просто щоб додати до можливих рішень: у мене була папка проекту всередині папки Dropbox, її переміщення вирішило проблему для мене. (ОС X)


Це спрацювало і для мене - хотів би, щоб ця відповідь була ближче до вершини. OS X для мене також (El Capitan).
natchiketa

Це вирішило і мою проблему. Дякую за це!
Федеріко

2
Чи знаєте ви, чому це відбувається? @Les
Ekaitz Hernandez Troyas

10

Моє питання - чутливість до регістру папок. У моїх кодових викликах require () були всі назви малих літер, АЛЕ насправді каталоги мали велику літеру в них. Я перейменував усі свої каталоги на малі регістри, і перегляд веб-пакетів працював моментально.


Це не слід проти голосувати, це спрацювало для мене. Мені знадобився деякий час, щоб усвідомити проблему, оскільки мій додаток все ще працював належним чином, але перезавантаження в реальному часі стосується чутливості до регістру.
skwidbreth

Якщо ви переносите свій проект з Windows на Mac, це може бути справжньою проблемою. Дякую!
Євген Кулабухов

Тут та сама проблема. Здається, що імпорт файлів не чутливий до регістру, однак перегляд буде невдалим, якщо назва шляху точно така ж, як і файлова система
Ісаак,

9

Одне питання полягає в тому, що якщо ваші назви шляхів не є абсолютними, то подібні речі відбуватимуться. Я випадково встановити resolve.rootна ./замість , __dirnameі це змусило мене витрачати багато часу видалення і повторного створення файлів , як вищий за мене , хлопці.


8

Якщо зміна fs.inotify.max_user_watches як вказівника Сезара все-таки не працює, спробуйте використовувати опитування замість власних спостерігачів, створивши свій сценарій, як показано в документації, або запустивши веб-пакет з --watch --watch-pollопціями.


8

Зверніть увагу, що якщо ви запускаєте веб-пакет на віртуальній машині (Vagrant / Virtualbox) і ви змінюєте свої файли на хост-платформі, оновлення файлів у спільній папці може не викликати інотифікацію в Ubuntu. Це призведе до того, що зміни не будуть сприйняті веб-пакетом.

див .: Квиток Virtualbox # 10660

У моєму випадку редагування та збереження файлу в de guest (in vi) запустило webpack. Відредагувавши його на хості (у PhpStorm, Блокноті чи будь-якому іншому додатку), не запускайте веб-пакет, що б я не робив.

Я вирішив це за допомогою vagrant-fsnotify .


2
Хоча я використовую vagrant-notify-forwarderдля більш магічного перезавантаження
Мань Тай

vagrant plugin install vagrant-notify-forwarderзробив для мене постійне рішення
4givN


7

Оновлення: видалення всього каталогу та git клонування знову з repo виправляє мою проблему.


2
Але для цього повинна бути причина
Мо Ельшариф

Це рішення добре працювало і для мене. Схоже на блокування ресурсів. Перше перезавантаження було завершено в консолі, але bundle.js не оновлено. При другому перезавантаженні він застряг на "Перевірка розпочалася в окремому процесі ...".
Ерік Парсо,

6

Якщо ви використовуєте Vim, спробуйте встановити для резервної копії значення так, а не автоматичне значення за замовчуванням. В іншому випадку Vim іноді перейменовує оригінальний файл і створює новий, який псує годинник webpack:

https://github.com/webpack/webpack/issues/781

Просто додайте це до своїх налаштувань vim, якщо це так:

встановити резервну копію = так


4

У мене була та ж проблема у файлі .vue. Коли сервер перезавантажився, все працювало нормально, але при наступному збереженні він більше не перекомпілювався. Проблема полягала у шляху до файлу імпорту, який написав велику літеру. Дуже важко зрозуміти цю проблему, оскільки все працює при перезавантаженні сервера. Перевірте випадок ваших шляхів.


3

Це не було для мене перекомпіляцією, але тоді я зрозумів / згадав, що webpack спостерігає графік залежності, а не лише папку (або файли). Звичайно, файли, які я міняв, ще не були частиною цього графіка.


3

Для мене проблемою було створення папок та файлів у VS Code. Для виправлення я повторно клонував своє репо та цього разу створив нові папки та файли через командний рядок замість Коду. Я думаю, що Code чомусь псував файли. Я бачив, що додаток щойно оновився, тому, можливо, це нова помилка.


2

У мене не було подібних проблем: ні вебпакет, ні згущення в режимі перегляду посуду, де відображалися внесені нами зміни. Я з’ясував, що це в основному моя вина, оскільки я міняв модуль (файл .tsx), який ще ніде не імпортувався в програмі (наприклад, App.ts, який є точкою входу), і я очікував, що інструменти побудови повідомляють про помилки. зроблені там.


1
Я починаю використовувати цей файл, імпортуючи його туди, де він був призначений.
itumb

Приємно вказувати! о боже, як серйозно, як я можу це забути. Мені потрібно увійти, щоб просто прокоментувати тут, щоб сказати спасибі :)
Lucky Lam

2

Я вирішив проблему шляхом пошуку помилки використання великих літер у шляху імпорту. Папка у файловій системі мала малу літеру, шлях імпорту - верхній регістр. Все скомпільовано чудово, тож це був лише веб-пакет, який включає в себе годинник.


2

Також виникла ця проблема у віртуальній машині VirtualBox (5.2.18) Ubuntu (18.04) із використанням Vagrant (2.1.15) із синхронізацією rsync. Раптом перша збірка працює чудово, але Webpack не враховує зміни згодом, навіть з fs.inotify.max_user_watches=524288набором. Додавання poll: trueв конфігурації Webpack також не допомогло.

vagrant-notify-forwarderПрацював лише (vagrant-fsnotify з якихось причин цього не робив), але потім відновлення відбулося занадто швидко після збереження файлу на хості, і я припускаю, що rsync не вистачило часу, щоб закінчити своє завдання (можливо, через кількість синхронізованих каталогів у моєму файлі Vagrant?).

Нарешті я змусив годинник знову працювати, також збільшивши aggregateTimeoutв моєму конфігурації Webpack:

module.exports = {
  watch: true,
  watchOptions: {
    aggregateTimeout: 10000
  },
  ...
}

Якщо це рішення працює для вас, спробуйте знизити це значення ще раз, інакше доведеться чекати 10 секунд, поки збірка не перезапуститься кожного разу, коли ви натиснете кнопку збереження. Значення за замовчуванням - 300 мс .


1

У мене те саме питання. І я помічаю, що це не компіляція, оскільки моя папка містить якийсь символ (*). І використання старого плагіна спостерігача, здається, вирішує проблему. Додайте цей рядок до конфігураційного файлу веб-пакета.

plugins: [
    new webpack.OldWatchingPlugin()
  ]

1

Для мене видалення node_modulesта повторне встановлення npm або yarn для встановлення всіх пакетів вирішило проблему


1

Що було причиною в моєму випадку:

Здається, значення: max_user_watches in /proc/sys/fs/inotify/max_user_watches впливає на веб-пакет

Щоб перевірити ваше фактичне значення

$cat /proc/sys/fs/inotify/max_user_watches
16384

16384 був у моєму випадку, і його все ще було недостатньо.

Я пробував різні типи рішень, такі як:

$ echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p

Але, здається, навіть якби я змінив значення, коли я перезапустив свій ПК, воно повернеться до типового 16384.

РІШЕННЯ, якщо у вас ОС Linux (у моєму випадку у мене є Манджаро):

Створіть файл:

sudo nano /etc/sysctl.d/90-override.conf

І заповнити його:

fs.inotify.max_user_watches=200000

Здається, 200000 мені вистачає.

Після того, як ви створили файл і додали значення, просто перезавантажте ПК, і у вас все буде добре.


0

Найпростішим рішенням для MacOS є наступне:

Відкрийте два вікна терміналу в одному каталозі, в якому знаходиться ваш проект.

У першому вікні терміналу запустіть: webpack --watch

У другому вікні терміналу запустіть: webpack-dev-server

Я випробував безліч можливих рішень, і це видається найбільш надійним


PS: Я використовую Mac OS Sierra.
skiabox

Це два абсолютно різних рішення однієї і тієї ж проблеми, і, ймовірно, не слід запускати їх паралельно. webpack --watchкомпілює проект і зберігає файли на диск, еквівалентно запуску webpackпісля кожного збереження. webpack-dev-server- це інструмент розробки, який компілюється в пам'ять і обслуговує вміст як службу через http. У будь-якому випадку ваша пропозиція не є рішенням, оскільки складені файли не будуть записані на диск, доки webpack --watchвони не працюватимуть як рекламується ..
ViggoV

0

Можливе рішення: зміна контексту до каталогу додатків.

У мене були всі конфігураційні файли webpack у підпапці:

components/
webpack/
 development.js
app.js

В webpack/development.js, набір context: path.join(__dirname, '../')вирішив мою проблему.


0

Спробувавши кілька стратегій для вирішення цієї проблеми, я в кінцевому підсумку просто здався, але потім, вирішуючи інше питання, я спробував знову, і раптом --watchпрапор нарешті запрацював.

Чесно кажучи, я не знаю, що конкретно змусило його працювати, але після виконання наступних кроків він щойно почав працювати:

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++

Могло статися так, що під час встановлення цих пакунків якась залежність просто додала відсутній фрагмент головоломки, хто знає ...

Сподіваюся, це допоможе тим, хто бореться за те, щоб це працювало.


0

Я додаю ще одну відповідь, оскільки вважаю, що це найкраще рішення на сьогодні. Я використовую його щодня, і він хитається! Просто встановіть цю бібліотеку:

https://github.com/gajus/write-file-webpack-plugin

Опис: Змушує програму webpack-dev-server записувати файли пакетів у файлову систему.

Як встановити:

npm install write-file-webpack-plugin --save-dev


0

Якщо це раптом сталося у вашому проекті, це може вирішити проблему.

Можливо, якимось чином файли, які відстежували зміни вашого проекту, які веб-пакет шукає, були пошкоджені. Ви можете створити їх знову, просто виконуючи прості дії.

  1. вийти зі свого проекту. ($: кд ..)
  2. перемістити ваш проект в інший каталог ($: mv {projectName} {newName})
  3. перейти в новий каталог ($: cd {newName})
  4. запустіть сервер і перевірте, чи не перезавантажується він при кожній зміні файлу (він повинен працювати в більшості випадків, оскільки зараз webpack створює нові файли для спостереження за змінами)
  5. вийди з dir ($: cd ..)
  6. повернути його до початкової назви ($: mv {newName} {projectNam}) Це спрацювало для мене ............

0

Я зіткнувся з цим запитанням, коли у мене виникла подібна проблема - виявилося, що webpack не проводив повторне впорядкування, навіть під час запуску webpack --config.

Я навіть видалив bundle.js, і веб-сторінка все ще відображалася, як і до моїх редагувань.

Для тих з вас, хто стикається з цією ж проблемою, я нарешті зробив опцію `` порожній кеш і жорстке перезавантаження '' в chrome (клацніть правою кнопкою миші кнопку перезавантаження з відкритими інструментами розробки), і це зробило цей трюк


0

Я зустрічав ту ж проблему, пробував багато речей, нарешті, Chrome Clear Browsing Data на Mac працював у мене.

Ці модулі були встановлені:

"браузер-синхронізація": "^ 2.26.7",

"browser-sync-webpack-plugin": "^ 2.2.2",

"webpack": "^ 4.41.2",

"webpack-cli": "^ 3.3.9"


0

Проблема полягала в розбіжності між файлами .js та .ts. Чому?

Під час побудови проекту Visual Studio компілює файли машинопису в .js та .js.map. Це абсолютно непотрібно, оскільки webpack також обробляє файли машинопису (з awesome-typecript-loader). Під час редагування файлів .tsx componet у Visual Studio Code або з відключеним compileOnSave опцією у tsconfig.json відредагований файл ts не перекомпілюється, і мій веб-пакет обробляє неактуальний файл .js.

Рішенням було вимкнути компіляцію файлів машинопису у Visual Studio при побудові проекту. Додайте

<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>

у PropertyGroup вашого .csproj.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.