我有一个旧的vue.js应用程序正在登台和测试服务器上运行。
问题在于网络控制台在浏览器中被https://localhost/sockjs-node/info?t=1602594418799
个请求所淹没,当然,它们失败了,因为它们引用的是浏览器中不可用的URL。
对于某些类似于生产(但不完全是)的环境,我想完全禁用HMR。
使用以下命令为网站提供服务:
yarn vue-cli-service serve --port 8080 --mode production
由于某些原因,仅mode production
不会禁用HMR。
我尝试了Internet上推荐的其他方法。
所以
module.exports = {
devServer: {
hot: false,
liveReload: false
}
}
为devServer
运行模式禁用实际的热刷新,但不禁用HMR-仍然看到那些/info
的请求。
另一种解决方案:
chainWebpack: config => {
config.module
.rule('vue')
.use('vue-loader')
.loader('vue-loader')
.tap(options => {
options.hotReload = false
return options
})
}
在我的情况下不起作用:“无法设置未定义的属性hotReload”,可能是因为我的项目使用“原始加载程序”而不是vue-loader
。
另一个解决方案:
chainWebpack: config => {
config.plugins.delete('hmr');
},
不起作用。不知道为什么。
另一个解决方案:
process.env.NODE_ENV === 'production'
这有效,不再有/info
垃圾邮件。
但是有一个问题。我需要像staging
,testing
这样的NODE_ENV,并想为它们禁用HMR。
我该怎么做?如何告诉vue.js和/或Webpack将NODE_ENV staging
等与production
一样对待?另外,如何基于其他自定义环境变量禁用HMR?
答案 0 :(得分:0)
因此,似乎最好的办法是运行yarn build
,然后在nginx或Apache或nodejs静态HTML服务器上提供dist文件夹。
仍然感到好奇,为什么当我使用mode production
通过vue-cli运行网站时,为什么vue.js(或webpack或其他任何东西)的行为方式不一样。
这很不直观;我希望mode production
的工作原理与构建站点并在任何其他服务器上托管之后完全一样。