Vue cli 3 горячая перезагрузка внезапно не работает в браузерах
У меня есть проект Vue, сгенерированный Vue cli 3, и моя горячая перезагрузка внезапно перестала работать в моих браузерах. Изменения, внесенные в код, по-прежнему регистрируются терминалом, однако мой браузер не фиксирует эти изменения. Я должен вручную обновить, чтобы забрать новые изменения. Как предложили некоторые другие, я вручную установил poll: true
в своем vue.config.js
и также попытался установить прокси, но оба не увенчались успехом.
Какие-нибудь предложения, чтобы сделать эту работу снова?
Обновление:
После некоторых обновлений Vue он снова начал работать снова. Я до сих пор не знаю причину этого. Это могло быть ошибкой в vue-cli?
Ответы
Ответ 1
Моя проблема была WDS
Консоль отображается:
[HMR] Waiting for update signal from WDS...
[WDS] Disconnected!
GET http://ip:port/sockjs-node/info?t=some-number
net::ERR_CONNECTION_TIMED_OUT sockjs.js?some-number
Решение для меня было:
в
package.json
менять
"serve": "vue-cli-service serve",
в
"serve": "vue-cli-service serve --host localhost",
или же
добавлять
module.exports = {
devServer: {
host: 'localhost'
}
}
в
vue.config.js
:)
Ответ 2
HMR имеет проблемы в различных средах, в таких ситуациях вы можете помочь себе с опцией опроса:
https://github.com/vuejs-templates/webpack/blob/develop/template/config/index.js#L21
var devMiddleware = require('webpack-dev-middleware')(compiler, {
publicPath: webpackConfig.output.publicPath,
stats: {
colors: true,
chunks: false
},
watchOptions: {
aggregateTimeout: 300,
poll: 1000
}
})
Кажется, я наконец нашел его: мой $cat /proc/sys/fs/inotify/max_user_watches
был на 8192, и это помогло мне:
echo 100000 | sudo tee /proc/sys/fs/inotify/max_user_watches
Теперь горячая перезагрузка Vue работает без sudo и без опроса! ))))
Один из режимов отказа, с которым я здесь столкнулся, - это то, что вам удалось установить несколько пакетов webpack в ваших node_modules.
Перезагрузка опирается на эти два бита кода, передающих события друг другу:
webpack-dev-server/client/index.js
var hotEmitter = require('webpack/hot/emitter');
hotEmitter.emit('webpackHotUpdate', currentHash);
webpack/hot/dev-server.js
var hotEmitter = require("./emitter");
hotEmitter.on("webpackHotUpdate", function(currentHash) {
Однако, если у вас установлено несколько веб-пакетов (например, один и один верхнего уровня в @vue/cli-service), запрос будет преобразовывать первый в ./node_modules/webpack/hot/emitter.js
, а второй в ./node_modules/@vue/cli-service/node_modules/webpack/hot/emitter.js
, которые не являются тот же объект и поэтому слушатель никогда не получает событие и перезагрузка не удалась.
Чтобы решить эту проблему, я просто удалил и переустановил @vue/cli-service, который, по-видимому, очищал package-lock.json и преобразовывался в единый веб-пакет верхнего уровня.
Я не знаю, есть ли какой-нибудь способ убедиться, что этого не произойдет, - однако vue-cli-3 может определить ситуацию и, по крайней мере, записать предупреждение в режиме dev?
[Кстати, добавление devServer: { clientLogLevel: 'info' } }
в vue.config.js действительно помогло отладить это.]
Ответ 3
Попробуйте выйти из текущего терминала, открыть новый и запустить команду npm run serve
. Это сработало для меня.
Ссылка
Удачи...
Ответ 4
Может быть, это поможет https://webpack.js.org/configuration/watch/#changes-seen-but-not-processed
"Убедитесь, что в вашей системе достаточно доступных наблюдателей. Если это значение слишком мало, средство просмотра файлов в Webpack не распознает изменения:"
cat /proc/sys/fs/inotify/max_user_watches
"В macOS папки могут быть повреждены в определенных сценариях. См. эту статью."
А по ссылке выше вы можете проверить другие известные проблемы.
Ответ 5
Я надеюсь, что это может кому-то помочь, я использовал терминал в своем WebStorm и vue-cli-service не работал, затем я открыл обычный терминал и что, может быть, что-то в WebStorm не позволило путь в вью-кли-сервис