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, чтобы определить ситуацию и хотя бы записать предупреждение в режиме разработки?
[Кстати, добавление devServer: { clientLogLevel: 'info' } }
в vue.config.js действительно помогло при отладке.]