我的Vue项目是由Vue cli 3生成的,但是我的浏览器突然停止了热重载。代码更改仍然被终端捕获,但是我的浏览器没有捕获到更改。我必须手动刷新才能获取新更改。建议我在vue.config.js
中手动设置poll: true
,并尝试设置代理,但两者都没有成功。
有什么建议可以让这个功能再次工作吗?
更新:
经过一些Vue更新,它突然又开始工作了。我仍然不知道原因。可能是vue-cli中的错误吗?
我的Vue项目是由Vue cli 3生成的,但是我的浏览器突然停止了热重载。代码更改仍然被终端捕获,但是我的浏览器没有捕获到更改。我必须手动刷新才能获取新更改。建议我在vue.config.js
中手动设置poll: true
,并尝试设置代理,但两者都没有成功。
有什么建议可以让这个功能再次工作吗?
更新:
经过一些Vue更新,它突然又开始工作了。我仍然不知道原因。可能是vue-cli中的错误吗?
[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'
}
}
to
vue.config.js
:)
vue-cli-service serve --https true
以便我们可以在本地使用HTTPS进行调试时,热重载就出问题了。添加 --host localhost
可以解决使用HTTPS时的热重载问题! - Uber Schnozhttps://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和轮询的情况下工作!)))
我遇到的一个故障模式是,如果您在node_modules中安装了多个webpack,则会出现此问题。
重新加载依赖于这两个代码段相互发出事件:
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) {
./node_modules/webpack/hot/emitter.js
和第二个./node_modules/@vue/cli-service/node_modules/webpack/hot/emitter.js
,它们并不是同一个对象,因此监听器永远不会得到事件,导致重新加载失败。devServer: { clientLogLevel: 'info' } }
对于调试非常有帮助。]devServer: { watchOptions: { poll: true }}
添加到我的 vue.config.js 文件中,但是它仍然无法正常工作。 - Gilian我每次创建Vue项目时都会遇到WDS问题(非常烦人,即使使用最新的vue cli 4.5.0和vue 2.6.11也无法解决)。
因此,下面提供的解决方案就是我每次都复制粘贴的。
在vue.config.js文件中:
module.exports = {
devServer: {
// Fixing issue with WDS disconnected and sockjs network error
host: '0.0.0.0',
public: '0.0.0.0:8080',
disableHostCheck: true,
// End of fix
}
}
disableHostCheck: true
为我解决了这个问题。谢谢@Earth_Believer。 - lucianokrebs我遇到了同样的问题(控制台显示了一个错误,提示“[WDS] Disconnected”),以下是我的解决方法。请注意,我使用的是Vue UI工具来管理我的项目,并没有编辑任何配置文件。
我不确定为什么,但这对我来说似乎起作用了。如果有人能解释一下为什么它有效,我会很高兴。
看起来/proc/sys/fs/inotify/max_user_watches
中的max_user_watches
值影响了webpack => 干扰了热重载。
要检查您的实际值
$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。
创建文件:
sudo nano /etc/sysctl.d/90-override.conf
并将以下内容填入:
fs.inotify.max_user_watches=200000
看来这个值对我来说已经足够了。
在你创建文件并添加该值后,只需重新启动电脑,就可以正常运行了。
NODE_ENV=development
添加到您的 .env
文件中即可解决问题。set NODE_ENV=development
可能会解决你的问题。
cat /proc/sys/fs/inotify/max_user_watches
"在macOS上,某些情况下可能会损坏文件夹。请参阅this文章。"pnpm install
。然后我使用了命令pnpm install --shamefully-hoist
。热重载开始无缝运行。 - undefined我希望这能帮助到某些人。我在WebStorm中使用终端时,vue-cli-service无法正常工作,然后我打开了一个普通的终端,问题就解决了。可能是WebStorm中的某些设置阻止了正确的vue-cli-service使用方式。
socket
运行正常吗?请检查网络检查器,是否有错误? - Ohgodwhy/sockjs-node/info?t=1543826222341
返回200 OK。 - Gilian{"websocket":true,"origins":["*:*"],"cookie_needed":false,"entropy":2916256970}
。因此,对我的代码所做的更改不会产生新的套接字调用。 - Gilian