J'ai un projet Vue généré par la Vue cli 3 et mon rechargement à chaud a soudainement cessé de fonctionner dans mes navigateurs. Les modifications apportées au code sont toujours récupérées par le terminal. Cependant, mon navigateur ne les prend pas. Je dois actualiser manuellement afin de prendre en compte les nouvelles modifications. Comme suggéré par d'autres, j'ai défini manuellement poll: true
dans mon vue.config.js
et j'ai également essayé de définir le proxy, mais les deux n'ont pas abouti.
Des suggestions pour que cela fonctionne à nouveau?
Mon problème était WDS
Console affichée:
[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
La solution pour moi était:
dans
package.json
changement
"serve": "vue-cli-service serve",
à
"serve": "vue-cli-service serve --Host localhost",
ou
ajouter
module.exports = {
devServer: {
Host: 'localhost'
}
}
à
vue.config.js
:)
HMR a des problèmes dans divers environnements. Dans ces situations, vous pouvez peut-être vous aider avec l'option de sondage:
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
}
})
On dirait que je l'ai finalement trouvé: mon $cat /proc/sys/fs/inotify/max_user_watches
était sur 8192 et cela m'a aidé:
echo 100000 | Sudo tee /proc/sys/fs/inotify/max_user_watches
Maintenant, Vue hot reload fonctionne sans Sudo et sans sondage! ))))
Un mode d'échec que j'ai rencontré ici est si vous avez réussi à vous retrouver avec plusieurs installations de webpack dans vos node_modules.
Le rechargement repose sur ces deux bits de code qui émettent des événements l'un à l'autre:
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) {
Cependant, si vous avez installé plusieurs packs Web (par exemple, un paquet de niveau supérieur et un sous @ vue/cli-service), le besoin résoudra le premier en ./node_modules/webpack/hot/emitter.js
et le second en ./node_modules/@vue/cli-service/node_modules/webpack/hot/emitter.js
, qui ne sont pas le même objet, de sorte que l'auditeur ne obtient l'événement et les recharges échouent.
Pour résoudre ce problème, je viens de désinstaller et de réinstaller @ vue/cli-service, ce qui semblait effacer le package-lock.json et le résoudre en un seul pack Web de niveau supérieur.
Je ne sais pas s'il y a moyen de faire en sorte que cela ne se produise pas. Cependant, vue-cli-3 pourrait peut-être détecter la situation et au moins enregistrer un avertissement en mode dev?
[L'ajout de devServer: { clientLogLevel: 'info' } }
à vue.config.js a été très utile pour le débogage.]
Peut-être que cela peut aider https://webpack.js.org/configuration/watch/#changes-seen-but-not-processed
"Vérifiez que vous avez suffisamment d'observateurs disponibles sur votre système. Si cette valeur est trop basse, l'observateur de fichiers de Webpack ne reconnaîtra pas les modifications:"
cat /proc/sys/fs/inotify/max_user_watches
"Sous macOS, les dossiers peuvent être corrompus dans certains scénarios. Voir this article."
Et dans le lien ci-dessus, vous pouvez vérifier d'autres problèmes connus.
Essayez de quitter le terminal actuel, ouvrez-en un nouveau et exécutez la commande npm run serve
. Cela a fonctionné pour moi.
Bonne chance...