webpack --watch не компилирует измененные файлы

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

Я попытался переустановить webpack С помощью npm uninstall но он все еще не работает.

какие идеи?

25 ответов


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 ' d это и mvон вернулся к своему первоначальному названию, а затем наблюдатель работал.

не знаю, что вызывает коррупцию, но я просто рад исправить.


Если ваш код не перекомпилируется, попробуйте увеличить количество наблюдателей (в Ubuntu):

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

источник:https://webpack.github.io/docs/troubleshooting.html


У меня была эта проблема при работе с WebStorm.

отключение Настройки - > Системные настройки - > "безопасная запись" решить это для меня.

нашел рекомендацию сделать так: Устранение Неполадок WebPack


добавление следующего кода в мой файл конфигурации webpack исправило проблему для меня, надеюсь, это поможет.

watchOptions: {
  poll: true
}

просто добавить к возможным решениям: У меня была папка проекта внутри папки Dropbox, перемещение ее решило проблему для меня. (OS X)


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


при изменении fs.через inotify.max_user_watches as pointend out by César по-прежнему не работает попробуйте использовать опрос вместо собственных наблюдателей, создав свой скрипт, как показано в docs или запуск webpack с --watch --watch-poll параметры.


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


Если вы используете Vim, вы должны попробовать установить backupcopy в Да, а не авто по умолчанию. В противном случае Vim иногда переименует исходный файл и создаст новый, который испортит webpack watch:

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

просто добавьте это в настройки vim, если это так:

set backupcopy=да


обратите внимание, что если вы запустите webpack на виртуальной машине (Vagrant / Virtualbox) и измените файлы на хост-платформе, обновления файлов в общей папке могут не вызвать inotify на Ubuntu. Это вызовет изменения не подхватываются webpack.

посмотреть: Virtualbox билет #10660

в моем случае редактирование и сохранение файла на de guest (в vi) вызвало webpack. Редактирование на хосте (в PhpStorm, Notepad или любом другом приложении) dit не запускает webpack, что бы я ни делал.

Я решил это с помощью бродяга-fsnotify.


У меня была такая же проблема на a .файл vue. Когда сервер перезагружен, все работало нормально, но при следующем сохранении он не перекомпилируется. Проблема заключалась в пути к файлу импорта с заглавной буквы. Очень сложно понять эту проблему, потому что все работает при перезагрузке сервера. Проверьте случае вашем пути.


Это не было перекомпиляцией для меня, но затем я понял / вспомнил, что webpack смотрит график зависимостей, а не только папку (или файлы). Конечно, файлы, которые я менял, еще не были частью этого графика.


Йоу!!!! Чувствительность к папке была моей проблемой. Мои кодовые вызовы require () имели все имена в нижнем регистре, но на самом деле в каталогах была прописная буква. Я переименовал все свои каталоги в нижний регистр, и просмотр webpack работал мгновенно. YESssssssssssssss!!!!! _AckerApple


способ, которым я решил проблему, заключался в поиске ошибки капитализации в пути импорта. Папка в файловой системе имела нижний регистр первой буквы, путь импорта-верхний регистр. Все скомпилировано отлично, так что это была просто проблема с webpack watch.


Работа для меня в Laravel Homestead

--watch --watch-poll

для меня создание папок и файлов в VS-коде было проблемой. Чтобы исправить это, я повторно клонировал свое РЕПО и на этот раз создал новые папки и файлы через командную строку вместо кода. Я думаю, что код по какой-то причине портил файлы. Я видел приложение только что обновлено, так что, возможно, это новая ошибка.


У меня такая же проблема. И я замечаю, что он не компилируется, потому что моя папка содержит некоторый символ(*). И использование старого плагина watcher, похоже, решает проблему. Добавьте эту строку в конфигурационный файл webpack.

plugins: [
    new webpack.OldWatchingPlugin()
  ]

возможное решение: изменение контекст в папке app.

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

components/
webpack/
 development.js
app.js

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


попробовав несколько стратегий для решения этой проблемы, я просто сдался, но затем, решая другую проблему, я снова попытался и внезапно --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++

возможно, при установке этих пакетов какая-то зависимость просто добавила недостающую часть головоломки, которая знает...

надеюсь, что это поможет любому, кто борется там, чтобы сделать его работу.


Я добавляю еще один ответ, потому что я считаю, что это лучшее решение до сих пор. Я использую его каждый день и это круто! Просто установите эту библиотеку :

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

описание : Заставляет программу webpack-dev-server записывать файлы пакета в файловую систему.

установка :

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

У меня была аналогичная проблема, ни webpack, ни rollup в watch mode ware не улавливали изменений, которые я сделал. Я узнал, что это была в основном моя вина, поскольку я менял модуль (.tsx файл), который еще не был импортирован в любом месте приложения(например, приложение.ts, который является точкой входа), и я ожидал, что инструменты сборки сообщат об ошибках, которые я сделал там.


для меня удаление node_modules и делать npm install или yarn снова, чтобы установить все пакеты решили проблему


попробуйте изменить --watch до -d --watch

работал для меня


простым решением для MacOS является следующее:

откройте два окна терминала в том же каталоге, в котором находится ваш проект.

в первом окне терминала запустите: webpack --watch

во втором терминале Windows запустите: webpack-dev-server

Я пробовал много возможных решений, и это, кажется, самый надежный


дело в том, что webpack загружает скрипт из какого-то странного url: webpack:/// который кэшируется. Вы должны добавить версию в конце скрипта, чтобы предотвратить кэширование: main-compiled.js?v=<?php echo time()?>"